![如何加速Unix中的选择性深度复制命令?](https://linux22.com/image/1292315/%E5%A6%82%E4%BD%95%E5%8A%A0%E9%80%9FUnix%E4%B8%AD%E7%9A%84%E9%80%89%E6%8B%A9%E6%80%A7%E6%B7%B1%E5%BA%A6%E5%A4%8D%E5%88%B6%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我正在使用 unix 的“find”命令从散布着 .svn 目录的目录树中递归导出文件。此命令需要很长时间才能运行。有没有更快的方法来完成同样的事情?
find source/ -type f -and ! -path '*.svn*' -and -exec cp {} export \;
我要做的是从 开始搜索目录树中的每个子目录source/
,然后将这些目录下的所有文件复制到export
目录中,跳过 .svn 目录中的所有文件
find source/ -type f -and ! -path '*.svn*' -and -print0 | xargs -0 \
cp --target-directory=export
对于那些好奇的人来说:参数在维基百科上。
答案1
如果你不能使用rsync
jhcaiced 的回答(+1),你可以通过以下几种方式来实现:
- 复制一个目录
cp -r
,然后使用find . -name .svn
-delete删除所有 .svn 目录 - 管道连接
tar c
到另一个tar x
。Tar 有--exclude=
您还可以优化代码。请注意,您要cp
为每个文件调用 。这需要很长时间。您可以使用-print0
和xargs -0
。这会快得多。
答案2
您可以使用 rsync 来避免一遍又一遍地复制相同的文件,命令如下:
rsync 源/导出/--排除'*.svn'
如果您还需要从导出中删除从源/中删除的文件,请将 --delete 参数添加到命令中。