复制所有文件和文件夹(不包括OS X上的Subversion文件和文件夹)

迈克尔·普雷斯科特

我正在尝试将所有文​​件和文件夹从一个目录复制到另一个目录,但排除某些文件。具体来说,我想排除Subversion文件和文件夹。但是,我想要一个通用而又简洁的解决方案。

我想我会发现在不久的将来需要排除几种类型的文件。例如,我可能要排除.svn,*。bak和* .prj。

这是我为此准备的,但对我不起作用。第一部分,查找作品,但是xargscp我做错了什么我尝试使用cp和不使用-R另外,我使用的是OS X,它的xargs版本似乎比linux系统的功能少

find ./sourcedirectory -not \( -name .svn -a -prune \)
     | xargs -IFILES cp -R FILES ./destinationdirectory
道格·哈里斯(Doug Harris)

(重新阅读问题后进行了编辑。发问者说未安装rsync)

您的find / xargs解决方案可能存在的问题是文件名中的空格。要解决此问题,请告诉find和xargs使用空字符(ASCII 0)分隔找到的文件:

find ./sourcedirectory -not ( -name .svn -a -prune ) -print0 | xargs -0 -IFILES cp FILES ./destinationdirectory

如果您发现rsync可用,我仍然认为rsync是更好的解决方案:

将rsync与-C选项一起使用。rsync手册页

这对于排除您通常不想在系统之间传输的各种文件非常有用。它使用与CVS类似的算法来确定是否应忽略文件。

这将告诉rsync忽略以下模式:

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/

例如:

rsync -avC /path/to/source/directory /path/to/destination/directory

(注意:如果您还不太熟悉rsync,请确保在该手册页上阅读有关rsync如何处理源路径中尾部斜杠的信息。如果包含斜杠,则与不包含斜杠的行为会有所不同。搜索“ trailing slash”)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章