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

copy small files in parallel from remote servers

我必须从本地机器上的远程服务器复制大量文件(大约 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
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 ... - 运行 并行最多 5 个作业

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 不会不堪重负。