MYDan
view release on metacpan or search on metacpan
box/tools/mrsync view on Meta::CPAN
#!/usr/bin/env perl
=head1 SYNOPSIS
$0 [--src src-range(default `hostname`)] --dst dst-range --sp src-path [--dp dst-path] \
[--timeout seconds(default 300)]
[--max number(default 128)]
[--retry number(default 2)]
[--gave number(default 3)]
[--nice number]
[rsync options]
=cut
use strict;
use warnings;
use Sys::Hostname;
use MYDan::Node;
use MYDan::Util::Mrsync;
use MYDan::Util::OptConf;
$| ++;
@MYDan::Util::OptConf::CONF = qw( pass_through no_ignore_case );
my $option = MYDan::Util::OptConf->load();
my %o = $option->set( retry => 2, timeout => 300, gave => 3, src => hostname() )
->get( qw( src=s dst=s sp=s dp=s timeout=i max=i retry=i nice=i user=s sudo=s gave=i chown=s chmod=s cc ) )
->dump();
$option->assert( qw( src dst sp ) );
$o{user} = `id -un` and chop $o{user} unless $o{user};
my $range = MYDan::Node->new( $option->dump( 'range' ) );
my $mrsync = MYDan::Util::Mrsync->new
(
( map { $_ => delete $o{$_} } qw( sp dp ) ),
map { $_ => [ $range->load( delete $o{$_} || [] )->list ] } qw( src dst )
);
$o{opt} = join ' ', @ARGV if @ARGV;
exit 0 unless my @failed = $mrsync->run( %o )->failed();
system 'stty echo';
die $range->load( \@failed )->dump . ": failed.\n\n";
( run in 0.492 second using v1.01-cache-2.11-cpan-71847e10f99 )