2013-03-29 34 views
2

需要帮助通过scp/sftp将$ cmd输出复制到第二台服务器。我有这个代码;工作正常,但需要很长时间,因为$ cmd输出是〜700MB,15000行。如何使用Net :: SSH2复制文件?

use warnings; 
use Net::SSH2; 
my ($host, $user, $password, $outfile) = @ARGV; 
my $cmd = "show zoneset active"; 
my $ssh = Net::SSH2->new(); 
$ssh->connect($host); 
$ssh->auth_keyboard($user, $password); 
my $channel = $ssh->channel(); 
$channel->exec($cmd); 
open OUTPUT, ">", "$outfile"; 
while (<$channel>) { print OUTPUT }; 
$channel->close; 
$ssh->disconnect; 
+0

我不知道你有什么连接,但对于我发送700MB(+加密)可能需要时间。你确定这个*可以加快吗? – amon

回答

0

鉴于一些假设:

  1. show zoneset active输出改变了一点,但不多,每次运行时间
  2. 您想运行此命令多次

然后,您最好的选择可能是在远程服务器上创建文件,然后使用rsync(可能与File::Rsync)在您的现有副本上获取文件本地服务器。

man rsync

Rsync是一种快速和非常多功能的文件复制工具。它可以在本地复制,通过任何远程外壳复制到/从另一主机,或复制到远程rsync守护进程012xx。它提供了大量的选项,可以控制其行为的每个方面,并允许非常灵活地指定要复制的文件组。它以其增量转换算法 而闻名,它通过仅发送 目标中的源文件和现有文件之间的差异来减少通过网络发送的数据量。 Rsync广泛用于备份和镜像,以及用于日常使用的改进的复制命令。