2013-03-29 5 views
2

Нужна помощь в копировании вывода $ cmd на второй сервер через scp/sftp. У меня есть этот код; работает нормально, но занимает много времени, поскольку выход $ cmd составляет ~ 700 МБ, 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

Я не знаю, какая у вас связь, но для меня отправка 700 МБ (+ шифрование) может занять свое время. Вы уверены, что это может быть ускорено? – amon

ответ

0

Учитывая некоторые предположения:

  1. Выход show zoneset active изменений немного, но не так много, каждый раз, когда это запустить
  2. Вы хотите запустить эту команду несколько раз

Тогда лучше всего создать файл на удаленном сервере, а затем использовать rsync (возможно, с File::Rsync), чтобы извлечь файл поверх существующей копии на вашем локальный сервер.

От man rsync:

Rsync это быстрый и чрезвычайно универсальный инструмент копирования файлов. Он может копировать локально, в/из другого хоста через любую удаленную оболочку или в/из удаленного демона rsync . Он предлагает большое количество опций, которые управляют всеми аспектами его поведения и позволяют очень гибко специфицировать набор файлов, подлежащих копированию . Он известен своим алгоритмом дельта-передачи, , который уменьшает объем данных, отправляемых по сети, отправляя только различия между исходными файлами и существующими файлами в назначении . Rsync широко используется для резервного копирования и зеркалирования и в качестве улучшенной команды копирования для повседневного использования.

Смежные вопросы