我想同时复制多个文件以加快我的操作流程,当前我使用以下方法:
scp -r root@xxx.xxx.xx.xx:/var/www/example/example.example.com .
但是它一次只能复制一个文件。我有100 Mbps光纤,所以我有足够的带宽可以同时复制很多文件,请帮忙。
#!/bin/bash
scp -i anuruddha.pem myfile1.tar centos@192.168.30.79:/tmp &
scp -i anuruddha.pem myfile2.tar centos@192.168.30.80:/tmp &
scp -i anuruddha.pem myfile.tar centos@192.168.30.81:/tmp &
wait
echo "SCP completed"
for file in file1 file2 file3 ; do
scp $file server:/tmp/ &
done
但是,这是回答你的问题 - "如何同时复制多个文件"。为了加快速度,您可以使用较弱的加密(rc4等),还要记住,瓶颈可能是您的硬盘 - 因为SCP不会隐式限制传输速度。
最后一个要点是使用rsync - 在某些情况下,它比scp更快...
ssh source.machine "tar czpf - /lot/of/data" | tar xzpf - -C /tmp
。 - Mike S.我不确定这是否对您有帮助,但我通常在源端存档(不需要压缩,只需存档即可),然后下载并解压文件。这将显著加快过程速度。 在进行存档之前,1GB 文件下载需要 > 8 小时 存档之后,同样的文件下载只需要 < 8 分钟。
100mbit以太网的速度实际上相当慢。理论上可以期望8MiB/s的速度,但在实践中,你通常最多只能获得4-6MiB/s。
即便是同时运行多个会话,你也不会看到速度提升。你可以自己尝试一下,运行两个并行的SCP会话来复制两个大文件。我猜你不会看到明显的加速效果。造成这种情况的原因有:
解决方法:
rsync
这样的工具(底层使用SSH)来复制自上次运行该命令以来发生更改的文件。可以通过以下方式来执行最后一个建议:
ssh root@xxx "cd /var/www/example ; tar cf - example.example.com" > example.com.tar
或者使用压缩:
ssh root@xxx "cd /var/www/example ; tar czf - example.example.com" > example.com.tar.gz
bzip2
压缩效果更好但速度较慢。因此我在像这样的任务中使用gzip
(z
)。如果您指定多个文件,scp 将按顺序下载它们:
scp -r root@xxx.xxx.xx.xx:/var/www/example/file1 root@xxx.xxx.xx.xx:/var/www/example/file2 .
或者,如果您希望文件并行下载,则使用多个scp调用,并将每个调用放在后台。
#! /usr/bin/env bash
scp root@xxx.xxx.xx.xx:/var/www/example/file1 . &
scp root@xxx.xxx.xx.xx:/var/www/example/file2 . &
&
以将其发送到后台,或查看GNU Parallel。 - Fredrik Pihl