如何加速Unix中的选择性深度复制命令?

如何加速Unix中的选择性深度复制命令?

我正在使用 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

如果你不能使用rsyncjhcaiced 的回答(+1),你可以通过以下几种方式来实现:

  1. 复制一个目录cp -r,然后使用find . -name .svn-delete删除所有 .svn 目录
  2. 管道连接tar c到另一个tar x。Tar 有--exclude=

您还可以优化代码。请注意,您要cp为每个文件调用 。这需要很长时间。您可以使用-print0xargs -0。这会快得多。

答案2

您可以使用 rsync 来避免一遍又一遍地复制相同的文件,命令如下:

rsync 源/导出/--排除'*.svn'

如果您还需要从导出中删除从源/中删除的文件,请将 --delete 参数添加到命令中。

相关内容