我曾经把tar球和SFTP备份,但它们正在变大,我不必要地传输数据我已经有了一份副本,所以决定更新我的代码以通过File::Rsync利用rsync和它的delta算法。我可以根据需要成功传输数据,但我似乎找不到记录传输数据量的方法。以前我可以统计生成的tar,但由于我不太可能移动源目录中的所有文件,我怎么知道移动的金额?
目标父目录可能不存在,因此通过Net :: SSH :: Perl创建它(mkdir -p / path / to / create),重点是我可以在rsync之前或之后对目标运行cmds。
我将包含我的代码,我怀疑它实际上是有用的但是如果我不这样做,那么无论如何都会要求它。建议任何人?
use File::Rsync;
$obj = File::Rsync->new( { verbose => 1,
archive => 1,
compress => 1,
recursive => 1,
rsh => '/usr/bin/ssh -i /user/.ssh/id_rsa',
delete => 1,
'rsync-path' => '/usr/bin/rsync'
} );
$obj->exec( { src => "$backupwhat",
dest => "host.co.uk:/remote_backup/$backupto"
} ) or warn "rsync failed\n";
答案 0 :(得分:3)
在一天结束时,File :: Rsync在rsync
命令之上是相当简单的包装器(在我的拙见中几乎到了毫无意义的地步)。
您也可以绕过它,直接使用rsync
。在这种情况下,如果添加rsync选项--stats
,它将在传输过程结束时打印您要查找的信息。您所要做的就是使用正则表达式解析输出以获取数据,如下所示:
my $output = qx{rsync -av --delete --stats "$backupwhat" "host.co.uk:/remote_backup/$backupto"};
warn("rsync failed?") if ($? / 256);
my ($sent) = ($output =~ /Total bytes sent: (\d+)/);
my ($received) = ($output =~ /Total bytes received: (\d+)/);