从远程服务器并行复制小文件
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 不会不堪重负。
我必须从本地机器上的远程服务器复制大量文件(大约 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 不会不堪重负。