我必须从本地盒子上的远程服务器复制大量文件(大约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
答案 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不会被淹没。