Sunday, November 9, 2014

How do you archive files of last week in Perl?

use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use File::Basename;
use Time::Piece;
use Time::Seconds;

#Get the basename of the script
my $me = $0;
$me =~ s{.*\\}{};

# Calculate DMY for last week w.r.t today
my $lastWeek = Time::Piece->new;
$lastWeek = $lastWeek  - ONE_WEEK;
$lastWeek = $lastWeek->dmy("");

my @temp = ();
my $archive = Archive::Zip->new();

if ($#ARGV != 1) {
print "\nUsage: $me <archive path> <input path>\n";
exit;
}
else {
foreach my $file ( grep { (-M) > 7 } glob("$ARGV[1]/*.*") ) {
print "Adding $file to Archive...\n";
$archive->addFile( $file, basename($file) ) or die "Unable to add \"$file\" to Archive";
push (@temp, $file);
}
     
unless ( $archive->writeToFileNamed("$ARGV[0]/$lastWeek.zip") == AZ_OK ) {
die "Error in creating archive - $!";
}
for (0..$#temp) {
unlink $temp[$_];
}
}

No comments :