1

以前はバックアップの tar ボールと SFTP を使用していましたが、それらが大きくなり、既にコピーを持っているデータを不必要に転送しているため、コードを更新してFile::Rsync経由で 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 に答える