1

我曾经对我的备份进行 tar ball 和 SFTP,但它们变得越来越大,而且我不必要地传输我已经拥有副本的数据,因此决定更新我的代码以通过File::Rsync和它的 delta 算法来利用 rsync。我可以按要求成功传输数据,但我似乎找不到记录传输数据量的方法。以前我可以统计生成的 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"; 
4

1 回答 1

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+)/);
于 2012-11-01T08:17:20.060 回答