The easiest approach is to get all files and throw away those filenames you don't want. This sample code doesn't do everything you would like but does show a throwaway method.
#!/usr/bin/perl
use warnings;
use strict;
use File::Basename;
#
# find all files in a directory that end in .txt and how old they are.
#
my $directory = shift;
my $script = basename($0);
die("USAGE: $script <target_directory> \n")
unless (defined($directory));
my $file_pattern = qr/\.txt$/i;
opendir DIR, $directory or die("Cannot open directory $directory\n");
while( my $file = readdir(DIR) ) {
#
# skip any file that does not satisfy our selection criterion.
#
next unless $file =~ $file_pattern;
#
# http://perldoc.perl.org/perlfunc.html for info
# on -X functions.
#
my $age = -M $file;
my $age_string = sprintf "%6.2f", $age;
$age_string =~ s/^\s+//;
printf "File %s is aged %s days.\n", $file, $age_string;
if ( $age > 30.0 ) {
print "move file $file here.";
}
}
closedir(DIR);
And the output is:
C:\Code>perl find_old_txt_files.pl "C:/Code"
File Challenging-Generals.txt is aged 4.84 days
File Chasing-Clam.txt is aged 0.79 days.
File GMvietnam.txt is aged 1.00 days.
File Tap-Into-Melons.txt is aged 0.07 days.
C:\Code>
|