2012-11-01 15 views
1

我用tar tar ball和SFTP备份,但它们正在增长到很大,我不必要地传输数据我已经拥有一份所以决定更新我的备份通过File::Rsync及其delta算法使用rsync的代码。我可以根据需要成功传输数据,但似乎无法找到记录传输数据量的方法。以前我可以统计生成的tar,但是因为我不太可能移动源目录中的所有文件,所以我怎么知道移动的数量?如何获得用Perl传输的数据量File :: Rsync

目标父目录可能不存在,因此它通过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"; 

回答

3

在一天结束的时候,文件:: 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+)/); 
+0

我应该更好地阅读文档。我认为这是一个Rsync的perl实现不是一个包装。由于我可能使用File :: Rsync分叉rsync进程,我同意这个模块有点没有意义,而且它阻止了我之后的统计信息的访问。非常感谢你的协助。 – dannix

+0

测试过你的代码,是替代我之前发布的并完美工作的代码。再次感谢。 – dannix

+0

很高兴你的工作! – mvp

相关问题