使用scp传质文件

时间:2013-12-02 11:17:34

标签: python linux perl batch-file

我正在尝试将大量数据从一台服务器传输到另一台服务器。我尝试过使用

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

哪个有效,但对于大文件来说速度很慢,并且需要为每个scp输入密码。

我还尝试过在转移之前和之后进行压缩和解压缩,但它甚至更慢。有更快的方法吗?

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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 - ");

答案 3 :(得分:-1)

我建议使用http://www.ncftp.com/。 NcFTP服务器是您所需要的。当您必须在服务器之间传输文件时,它可以快速且最佳地工作。