在某些机器中,有近五百万个小型(50KB)文本文件。我需要将它们发送到LAN上的另一台机器。我试着做了
scp *.txt remote_machine:
因为ssh连接在它们之间设置了无密码。但是为每个文件建立了一个新的连接,所以它的速度非常慢。
因此我想知道这样做的最佳策略是什么。
答案 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。