如何有效地远程传输数百万个文件

时间:2012-03-07 11:46:58

标签: ssh file-transfer scp

在某些机器中,有近五百万个小型(50KB)文本文件。我需要将它们发送到LAN上的另一台机器。我试着做了

scp *.txt remote_machine:

因为ssh连接在它们之间设置了无密码。但是为每个文件建立了一个新的连接,所以它的速度非常慢。

因此我想知道这样做的最佳策略是什么。

4 个答案:

答案 0 :(得分:4)

您可以在转移前制作files.tar.gz文件。

答案 1 :(得分:1)

ssh也意味着加密/解密,为什么不使用ftp转移...如果安全性不是真正的问题?

更重要的是,您可以存档数据并在传输后解压缩...如果您的网络速度很慢。

简而言之,发出以下命令进行存档..

cd /path/to/transfer/folder
tar -cvpjf /tmp/transfer.tar.bz2 .

转移你将发出命令

ftp open remotemachine
put /tmp/transfer.tar.bz2

在回收时,您将在要发出所有文件夹的文件夹中发出命令...

cd /path/where/to/extract
tar -xvpjf ~/transfer.tar.bz2
rm ~/transfer.tar.bz2

肯定你可以自动化它,我自动化这个过程让我将大块数据传输到目标......

答案 2 :(得分:1)

.tar.gz文件在一起,un.tar.gz文件在另一端分开。

tar cz *.txt | ssh remote_machine 'tar xz'

Ssh本身会降低速度。如果要在同一网络上的主机之间进行复制,并且安全性不是问题,那么使用原始tcp连接可能会更好。

remote_machine$ nc -l 3333 -q 1 | tar xz
local_machine$ tar cz *.txt >/dev/tcp/remote_machine/3333

如果您想使用3333中的其他端口号,请确保在两行中更改它。

答案 3 :(得分:1)

不确定scp是否是多线程的。如果不尝试这样的事情,那么更好地利用所有核心/ cpu和网络带宽:

scp [A-M]*.txt remote_machine:
scp [M-Z]*.txt remote_machine:
scp [0-9]*.txt remote_machine:
...

当然,使用的模式取决于文件的命名。

您也可以使用相同的方法使用rsync而不是scp。