传输文件使用scp

我试图将大量的数据从一台服务器转移到另一台服务器上。 我试过使用

scp <file> <address@server:/path/to/scp/to 

哪个起作用,但是对于大文件来说非常慢,并且要求我为每个scpinput一个密码。

我也试过在传输之前和之后进行压缩和解压缩,但速度更慢。 有更快的方法吗?

这是传输大量数据的最佳方式吗?

如果你想压缩和传输目录中的所有文件,你可以使用这个:

 tar -cf - <DIR>/* | sshpass -p '<password>' ssh <address@server> 'tar -xf - -C /path/to/unzip/to' 

这将压缩所有文件,通过ssh(自动填充密码)传输,并将其解压缩到第二台服务器上的指定路径中。

你可以把它放在一个bash脚本中,如下所示:

在cd中显示所有目录,并设置为$ mydir:

 mydirs=`ls -p | grep "/"` 

在cd中为每个目录执行脚本:

 for i in $mydirs; do echo "Zipping directory ($i)..."; tar -cf - <DIR>/* | sshpass -p '<password>' ssh <address@server> 'tar -xf - -C /path/to/unzip/to' done 

rsync是一个不错的选择。 它支持ssh以及它也支持压缩。 检查man rsync

SCP的一个常见问题是它不会传输请求,所以在传输大量小文件时可能会非常缓慢。

由于@FlyingFrog已经拥塞了,可以用tar解决。

从Perl你可以很容易地使用Net :: OpenSSH ,它也可以处理密码认证。

 use Net::OpenSSH; my $ssh = Net::OpenSSH->new($host, user => $user, password => $password); $ssh->system({ stdin_file => ['-|', 'tar', 'czf', '-', @files] }, "cd $dest && tar zzf - "); 

我会建议使用http://www.ncftp.com/ 。 NcFTP服务器是你需要的。 当你不得不在服务器之间传输文件时,它工作的很快,最好。