END
use Carp;
-use DateTime::Format::ISO8601;
+use DateTime::Format::RFC3339;
our @files;
our $rm = 1;
our $slop;
our @intervals;
+sub badusage ($) {
+ print STDERR "bad usage: $_[0]\n$usage" or die $!;
+ exit 8;
+}
+
sub scan () {
- my $parser = DateTime::Format::ISO8601->new;
+ my $parser = DateTime::Format::RFC3339->new;
foreach my $f (<[0-9]*>) {
if ($f !~ m/^ \d\d\d\d - \d\d - \d\d
(?: [-+] \d{1,2} \:? \d\d )? )? /x) {
print STDERR "ignoring $f\n";
}
- my $t = $parser->parse_time($f) // confess;
- my $t = $t->epoch() // confess;
- push @files, { F => $f, T => $t, U => [] ];
+ $!=0; $?=0; my $t = `date -d '$&' +%s`;
+ die "date(!) failed on $&: $? $!" if $! || $?;
+ chomp $t or confess;
+ push @files, { F => $f, T => $t, U => [] };
}
}
my $n = $int->{Number};
my $d = $int->{Interval};
my $spec = $int->{Spec};
- my $start_age = $int->{Number+1) * $interval;
+ my $start_age = ($n+1) * $d;
my $i = 0;
# find $i, the youngest which is at least $number x $interval
}
for (;;) {
- push $files[$i]{U}, $spec;
+ push @{ $files[$i]{U} }, $spec;
# find $j, the closest to $i which is at least $d-slop younger
my $j = $i;
}
foreach (@files) {
next if @{$_->{U}};
- print "remove $_>{F}\n";
+ print "remove $_->{F}\n";
if ($rm) {
my $r= system 'rm', ($recurse ? ('-r') : ()), "--", $_->{F};
die "run rm: $!\n" unless defined($r) && $r >= 0;
- exit 16 if $r;
+ exit 12 if $r;
}
}
}
foreach (@ARGV) {
m/^(\d+)x(\d+)$/ or badusage "bad <number>x<interval> $_";
- push @intervals, { Spec => $&, N => $1, I => $2 ];
+ push @intervals, { Spec => $&, N => $1, I => $2 };
}
scan();
precomp();
-foreach $int (@intervals) { flag $int }
+foreach (@intervals) { flag $_ }
implement();