Here are a couple of File::Find scripts. The first is simpler and dosn't examine subdirs.
#!/usr/bin/perl
#check File::Find and note that the mtime
#of a directory matches that of its newest file (for static files).
#You can use the module File::Find to traverse the directory
#structure and use stat to find the age of the file. The
#example below sets up a hash data structure that contains
#the name of the file and the last accessed modified time.
#The application then compares the values in the hash and
#prints out the newest file.
use strict;
use File::Find;
use vars qw/%files/;
sub findNewestFiles {
my $element = $File::Find::name;
return if (!-f $element);
$files{$element} = (stat($element))[9];
}
#######################################################
# MAIN
#######################################################
my $dir = '/home/zentara/1down';
find(\&findNewestFiles, $dir);
my $newestfile;
my $time = 0;
while(my ($k, $v) = each(%files)) {
if ($v > $time) {
$newestfile = $k;
$time = $v;
}
}
$time = localtime($time);
print "The newest file is $newestfile : $time\n";
exit;
A second more complex version
#!/usr/bin/perl
#check File::Find and note that the mtime
#of a directory matches that of its newest file (for static files).
#that is NEWEST not where the last file was modified(edited)
#find the directory with the most recent modified time,
#then use glob on that directory to find the most recent file.
#That might be more efficient given the number of files and
#directories that you are searching through because you would
#only be storing directories in the hash and the application would
#not be calling stat on all those files.
#You can use the module File::Find to traverse the directory
#structure and use stat to find the age of the file. The
#example below sets up a hash data structure that contains
#the name of the file and the last accessed modified time.
#The application then compares the values in the hash and
#prints out the newest file.
use strict;
use File::Find;
my %dirs;
my $dir = '/home/zentara/1down';
#######################################
find(\&findNewestdirs, $dir);
sub findNewestdirs {
my $element = $File::Find::name;
return if (!-d $element);
$dirs{(stat($element))[9]} = $element;
}
######################################
my @times1 = sort { $a <=> $b } keys %dirs;
my $tmax = pop @times1;
my $newestdir = $dirs{$tmax};
#now find latest file in the latest dir
my $lat_file;
while (glob ("$newestdir/*")) {
#for Access time, not creation time
#$lat_file = $_ if ((-f) && (!defined ($lat_file) || -A $_ < -A $lat_f
+ile));
$lat_file = $_ if ((-f) && (!defined ($lat_file) || -M $_ < -M $lat_fi
+le));
}
if (defined ($lat_file)) {
print "latest_file is $lat_file\n";
}
exit;
|