在bash中将前100k文件夹从一个目录复制到另一个目录的最快方法是什么

时间:2018-04-24 13:51:07

标签: bash unix

我有一个包含大约500K文件夹的目录,我想将此目录中的100K文件夹复制到另一个目录。

目前,我已经使用了100K文件夹的路径,然后使用以下方法将它们复制到另一个目录:

while read line; do cp -R $line <dest_folder>; done < file_with_paths.txt

上述方法需要花费大量时间复制一个文件夹(每个文件夹基本上有2个文件),每2秒钟一次。

有更快的方法吗?

2 个答案:

答案 0 :(得分:1)

我会使用GNU finutils包中的xargs:

xargs -P 1 cp -r -t dest_folder < file_with_paths.txt
  • -P 1告诉xargs一次只能在子进程上运行,因为cp不能很好地并行
  • cp-t一起用作命令末尾的xargs put参数

此命令将运行几个cp,每个cp都有最大可能的文件夹作为参数。如果您想控制每个cp复制的文件夹数量,请使用-L选项,例如-L 999

请注意,如果“file_with_paths.txt”未预先构建,则可以与ls -1 | head -n 100000结合使用。

答案 1 :(得分:0)

我经常使用tar复制层次结构

未测试

cd /path/to/source/directory
<file_with_paths.txt xargs sh -c '
    tar cf - "$@" | (cd /path/to/destination/directory && tar xf -)
' sh

我可以想象这会慢于rsync