从远程服务器并行复制小文件

时间:2018-04-25 20:46:16

标签: linux bash shell scp gnu-parallel

我必须从本地盒子上的远程服务器复制大量文件(大约2000个文件,每个文件大小约5MB),所以我通常在本地盒子终端上运行命令以复制文件:

scp goldy@machineA:/process/snap/20180418/* /data/files/

有没有办法使用gnu-parallel或其他任何东西从远程服务器并行复制这些文件?我的意思是并行复制5个文件而不是一个一个地完成所有操作。

注意:下面是远程服务器上的文件名。

abc_proc_1_log.data
abc_proc_2_log.data
abc_proc_3_log.data
abc_proc_4_log.data
...
abc_proc_2000_log.data

2 个答案:

答案 0 :(得分:2)

ssh goldy@machineA 'ls -1 /process/snap/20180418/*' \
| parallel -j5 'scp goldy@machineA:{} /data/files/{}'
  • ssh goldy@machineA 'ls -1 /process/snap/20180418/*' - 事先从远程机器获取文件名列表
  • parallel -j5 ... - 在parralel中运行最多5个职位

答案 1 :(得分:2)

您的问题在GNU Parallel(man parallel)的手册页中进行了描述: https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Parallelizing-rsync

seq -w 0 99 | parallel rsync -Havessh fooserver:src/*{}.png destdir/

但是使用这些小文件,您可能想要添加-j100 --delay 0.01。延迟应该确保sshd不会被淹没。