我的要求很简单但无法找到有效的方法。
我有一个名为Code的目录,其中包含大约14个文件,大约为40 GB。我想要做的就是在同一目录级别创建此Code文件夹的副本。 Means Code和Code_Copy在同一个文件夹中。
如果我使用查找。 |在Code文件夹中并行cp -rpf {} ../ Code_Copy ,我得到正确的目录结构以及Code文件夹中存在的所有文件,也可以直接复制到Code_Copy。
如果我使用树| parallel cp -rpf {} ../ Code_Copy ,目录结构是正确创建的,但即使在“无法统计文件:”等对树的输出行给出错误之后,命令也会继续运行很长时间命令。
请帮助提供解决方案。
提前致谢
答案 0 :(得分:1)
树将失败,因为它不提供路径,而是使用ascii art绘制路径。这不是并行的有用输入。
最简单的解决方案是:
cp -a Code Code_Copy
但这可能很慢。并行运行rsync可能是最快的解决方案,具体取决于您的磁盘系统:
find . -type f | parallel 'mkdir -p ../Copy/{//}; rsync -a {} ../Copy/{}'
# To get permissions and special files fixed
rsync -a ./ ../Copy/
要充分利用GNU Parallel,请考虑阅读教程:http://www.gnu.org/software/parallel/parallel_tutorial.html
答案 1 :(得分:0)
迟到的答案,但你需要分两步完成。首先构建目录树,然后复制文件。来自代码的父目录:
NUM_JOBS=4
find Code -type d -print0 | parallel -j$NUM_JOBS -0 "mkdir -p Code_Copy/{}"
find Code ! -type d -print0 | parallel -j$NUM_JOBS -0 "cp -P {} Code_Copy/{}"
-P 选项可保留复制的树中的软链接。