49 lines
1018 B
Perl
Executable File
49 lines
1018 B
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
use 5.010001;
|
|
use strict;
|
|
use warnings;
|
|
|
|
use File::Rsync;
|
|
use DateTime;
|
|
use DateTime::Duration;
|
|
use DateTime::Format::Strptime;
|
|
use Getopt::Long;
|
|
|
|
my $rsync_src;
|
|
my $rsync_dst;
|
|
my $age;
|
|
|
|
GetOptions ("source=s" => \$rsync_src,
|
|
"destination=s" => \$rsync_dst,
|
|
"age=i" => \$age)
|
|
or die("Error. Wrong arguments!\n");
|
|
|
|
my $now = DateTime->now();
|
|
my $cutoff_timestamp = $now - DateTime::Duration->new(days => $age);
|
|
my $parser = DateTime::Format::Strptime->new(
|
|
pattern => '%Y/%m/%d %H:%M:%S',
|
|
time_zone => 'UTC',
|
|
on_error => 'croak',
|
|
);
|
|
|
|
my $rsync = File::Rsync->new(archive => 1);
|
|
my @files = grep {
|
|
$_->{timestamp} > $cutoff_timestamp
|
|
} map {
|
|
my @parts = split(/\s+/, $_);
|
|
{
|
|
name => $parts[4],
|
|
timestamp => $parser->parse_datetime($parts[2] . ' ' . $parts[3]),
|
|
}
|
|
} $rsync->list(src => $rsync_src);
|
|
|
|
#use DDP; p @files;
|
|
|
|
$rsync->exec(
|
|
src => $rsync_src,
|
|
dst => $rsync_dst,
|
|
include => [map { $_->{name} } @files],
|
|
exclude => ['*'],
|
|
) or warn "rsync failed\n";
|