除了.svn文件夹及其子内容以外的Rsync吗?


10

处理一个Subversion仓库和一个不太了解它如何工作的新用户。

长话短说,由于复制随机的.svn文件夹导致其本地结构混乱,因此我执行了以下操作:

  • 将本地结构复制到名为暂存的文件夹中
  • 从暂存目录中递归删除所有.svn文件夹
  • 签出回购到“干净的文件夹”

现在,我们进入了最后一步-获取临时文件夹的内容以覆盖干净的内容。

我需要有一个命令将登台目录的内容复制到clean目录,删除仅在clean目录中的所有内容,但保留clean文件夹的.svn文件夹。

这听起来像是rsync的工作。以下命令正确吗?

rsync -avr --exclude=.svn* [staging] [clean]

6
你总是可以运行rsync--dry-run选项找出来!
蒂姆(Tim)

哈哈哈,谢谢!不知道该选项是否存在。应该更仔细地阅读男人的!
SeanKilleen

Answers:


31

-Crsync 的选项可能是您想要的。

但是,不要让手册页中的简短描述欺骗您。似乎该选项仅适用于CVS,但是根据您的rsync版本,它将跳过几乎存在的每个常见版本控制系统的文件。

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).

2
请非常小心,因为这些扩展名可能会用于您确实要复制的文件,例如。*.a适用于iOS静态库。
Max Chuquimia 2014年

不包括NB文件和目录:不会复制任何名为“ core”的文件夹,例如/ myproj / api / / myproj / core / <-不备份!
teknopaul

7

差不多-这应该是

rsync -av --exclude='.svn*' [staging] [clean]

或任何其他形式的引号,以防止外壳扩展通配符。(通配符只会匹配名称以开头的不太可能的文件--exclude=.svn,但最好不要冒险,即使外壳配置为阻塞不匹配的通配符或将其扩展到空列表,也要使其正常工作。 )

-r已包含在中-a。多余r的只是多余的,不会造成任何伤害。

--exclude导致匹配其参数的文件不会被复制,也不会考虑进行递归遍历。rsync的通常困难是反方向,除了目录的某些部分之外,不包括目录。请参阅Rsync过滤器:仅复制一种模式以获取一些提示。

在这种特殊情况下,排除版本控制目录是获得所需内容的快速方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.