rsync-timefilter/rsync-timefilter.pl
2020-05-17 23:17:24 +02:00

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";