What was created or modified yesterday?
Ever want to have a list of what files were created or updated in the last 24 hours? Or maybe you run a big old-fashioned website and you want to have a "What's New" page that actually shows what's new. I wrote this Perl script to keep track of what files were modified on a (Microsoft) web server. I was having some trouble with someone who would edit files without telling me. The script builds a list of files and sends this list to me via email. It is set to run daily at midnight.
#!C:\perl\bin\perl.exe use NTsendmail; use Time::localtime; ####################################################################### # modfilesweep_website.pl # # Author: Steve DeGraeve # Created : August 30th, 2001 # Modified: December 14th, 2001 # ####################################################################### $root = "D:\\inetpub\\wwwroot\\mywebsite"; $baseurl = 'http://www\.mywebsite\.com'; @files = (); @dirs = (); $numdays = 1; $currenttime = time(); $twentyfourhoursago = time() - ($numdays*86400); $log = ""; %files = (); $emailfrom = 'youremail@example.com'; $emailto = 'youremail@example.com'; $emailsubject = "Website Changes"; $smtpserver = "smtp.example.com"; ####################################################################### push @dirs, $root; # # TRAVERSE DIRECTORIES # foreach $d (@dirs){ # OPEN ROOT DIRECTORY opendir DIR, $d || print "Error opening DIR $d\n"; # GET DIRECTORIES IN LIST @alldirs = readdir DIR; foreach $dr (@alldirs){ if (($dr ne ".") && ($dr ne "..") && (-d $d."\\".$dr)){ push @dirs, $d."\\".$dr; } } close DIR; opendir DIR, $d || print "Error opening DIR $d\n"; # READ LIST OF FILES @allfiles = grep !/^\./, readdir DIR; foreach $f (@allfiles){ $filename = $d . "\\" . $f; ($dev,$ino,$md,$nlnk,$uid,$gid,$rd,$sz,$at,$mtime,$ct,$b,$bs) = stat $filename; if ($mtime > $twentyfourhoursago && $mtime < $currenttime){ $files{$filename} = $mtime; } } closedir DIR; } # # SORT MODIFIED FILES BY NAME AND COMPILE THE LOG OF THEM # @keys = sort keys %files; foreach $key (@keys){ $tm = localtime($files{$key}); $month = $tm->mon+1; $day = $tm->mday; $hours = $tm->hour; $minutes = $tm->min; $seconds = $tm->sec; $temp = sprintf("%02d/%02d %02d:%02d:%02d",$month,$day,$hours,$minutes,$seconds); $key =~ s|$root|$baseurl|ig; $key =~ s|\\|\/|g; $log .= "$key - $temp\n"; } # # COMPOSE EMAIL # $ENV{"NTsendmail"} = $smtpserver; $mail = new NTsendmail; $from = $emailfrom; $to = $emailto; $subject = $emailsubject; $tm = localtime(time()); $month = $tm->mon+1; $day = $tm->mday; $hours = $tm->hour; $minutes = $tm->min; $seconds = $tm->sec; $temp = sprintf("%02d/%02d %02d:%02d:%02d",$month,$day,$hours,$minutes,$seconds); $message = "HELLO!\nHere are the pages that have been edited in the last "; $message .= $numdays * 24 . " hours (since " . $temp . "):\n\n"; $message .= $log . "\n"; print $message; # # SEND EMAIL IF THE LOG IS NOT EMPTY # if ($log ne ""){ $mail->send($from, $to, $subject, $message); } # # DONE. #