2

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

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

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

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

请帮助提供解决方案。

提前致谢

4

2 回答 2

4

tree 将失败,因为它不提供路径,而是使用 ascii 艺术绘制路径。这对并行输入没有用。

最简单的解决方案是:

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

于 2013-09-11T13:39:35.967 回答
1

迟到的答案,但您需要分两步完成。首先构建目录树,然后复制文件。从Code的父目录:

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

于 2017-01-26T20:41:07.760 回答