#!/usr/bin/perl use strict; # create monthly tar files from a directory full of *.eml files my %opties = ( 'filedir', '/usr/local/assp/spam', 'archdir', '/usr/mail/tar', 'fext', '\.eml$' ); chdir $opties{filedir}; my ( %files, %tarsets ); # %files: keys = file names; values = file modification date # %tarsets: keys are "YYYYMM", values are lists of data file names opendir D, "."; for ( grep /$opties{fext}/, readdir D ) { $files{$_} = $^T - ((-M)*24*3600); # convert file age to seconds, subtract from $^T to get file mod.date, } closedir D; for my $f ( keys %files ) { # use localtime to get month, year of modification: my ($m,$y) = (localtime($files{$f}))[4,5]; my $ym = sprintf( "%d%02d", $y+1900, $m+1 ); $tarsets{$ym} .= "$f\n"; } # run tar with "--files-from -" and print file name list to it thru a pipe $|++; for my $d ( sort keys %tarsets ) { print "makeing tar file for $d..."; open T, "| tar --create --file $opties{archdir}/$d.tar --files-from -" or die "can't run tar for $d: $!"; print T $tarsets{$d}; close T; print "done\n"; }