in reply to Finding a file by age (Newest First)
The stat call returns a list with mtime at index 9. Here's an example. I use glob to get the directory contents, but your readdir works, too. I'll pitch in a Schwarzian Transform to reduce the load of stat.
Having $b to the left in the sort comparison gives newest first.my @sorted = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ (stat)[9], $_ ] } glob('*'); { # diagnostic local $, = ' '; print @sorted; } my @results = grep { /^$mask/ig } @sorted; print "Your file is: ", $results[$position-1], $/;
If $mask is given as a glob pattern instead of a regex, that can replace '*' in the glob call to remove the grep step. If the arguments come from the command line, your shell will do the glob for you, making @ARGV[1..$#ARGV] your filename list.
Update: Improved version, quicker by sorting a smaller pool:
my @candidates = grep { /^$mask/ig } glob('*'); my @sorted = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [ (stat)[9], $_ ] } @candidates; print "Your file is: ", $sorted[$position-1], $/ if defined $sorted[$position-1];
After Compline,
Zaxo
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Finding a file by age (Newest First)
by ChuckularOne (Prior) on Jun 04, 2004 at 19:11 UTC |