Gnu并行用于复制大量数据(大约40 GB)

时间:2013-09-11 12:17:21

标签: parallel-processing gnu

我的要求很简单但无法找到有效的方法。

我有一个名为Code的目录,其中包含大约14个文件,大约为40 GB。我想要做的就是在同一目录级别创建此Code文件夹的副本。 Means Code和Code_Copy在同一个文件夹中。

如果我使用查找。 |在Code文件夹中并行cp -rpf {} ../ Code_Copy ,我得到正确的目录结构以及Code文件夹中存在的所有文件,也可以直接复制到Code_Copy。

如果我使用树| parallel cp -rpf {} ../ Code_Copy ,目录结构是正确创建的,但即使在“无法统计文件:”等对树的输出行给出错误之后,命令也会继续运行很长时间命令。

请帮助提供解决方案。

提前致谢

2 个答案:

答案 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 选项可保留复制的树中的软链接。