2

在通过 scp/sftp 将 $cmd 输出复制到第二台服务器时需要帮助。我有这个代码;工作正常,但需要很长时间,因为 $ cmd 输出约为 700MB,15000 行。

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;
4

1 回答 1

0

给出一些假设:

  1. 每次运行时,输出都会发生一些show zoneset active变化,但变化不大
  2. 您想多次运行此命令

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

来自man rsync

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

于 2014-06-15T19:45:11.180 回答