我有一个包含大约500K文件夹的目录,我想将此目录中的100K文件夹复制到另一个目录。
目前,我已经使用了100K文件夹的路径,然后使用以下方法将它们复制到另一个目录:
while read line; do cp -R $line <dest_folder>; done < file_with_paths.txt
上述方法需要花费大量时间复制一个文件夹(每个文件夹基本上有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