如何使用Perl File :: Rsync获取传输的数据量

时间:2012-11-01 04:45:26

标签: perl rsync

我曾经把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"; 

1 个答案:

答案 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+)/);