By the way, do you know you don't need to be root to install a module locally?
I do know one way, but it's rather ugly.
use strict;
use warnings;
use File::Spec qw( catfile );
use Time::Local qw( timegm );
sub localdate {
my ($time) = @_;
my ($y, $m, $d) = (localtime($time))[5, 4, 3];
$y += 1900;
$m += 1;
return ($y, $m, $d);
}
sub previous_day {
my ($y, $m, $d) = @_;
# Use GMT since all days are 24*60*60 seconds long in GMT.
my $prev = timegm(0, 0, 0, $d, $m-1, $y) - 24*60*60;
my ($p_y, $p_m, $p_d) = (gmtime($prev))[5, 4, 3];
$p_y += 1900;
$p_m += 1;
return ($p_y, $p_m, $p_d);
}
sub today { return localdate(time()); }
sub yesterday { return previous_day(today()); }
{
my ($yd_y, $yd_m, $yd_d) = yesterday();
my $dir = ...;
opendir(my $dh, $dir)
or die("Unable to open log dir \"$dir\": $!\n");
while (my $file_name = readdir($dh)) {
my $file_full = catfile($dir, $file_name);
next if ! -f $file_full;
my $mtime = (stat($file_full))[9];
my ($f_y, $f_m, $f_d) = localdate($mtime);
if ( $f_y == $yd_y
&& $f_m == $yd_m
&& $f_d == $yd_d
) {
...copy the file...
}
}
}
Update: Fixed order or params for timegm.
|