如何从与文件类型匹配的特定目录中过滤最新出现的文件名?

时间:2015-04-21 00:18:42

标签: regex perl

我写了这个来检查是否在某个目录中创建了一个文件并给我最新的文件,如何修改我的正则表达式只能获取某个文件类型的最新文件*(比如说.txt)< / p>

my $DIR="C:\\Dropbox\\AnalysesLogs";
opendir(my $DH, $DIR) or die "Error opening $DIR: $!";
my @files = map { [ stat "$DIR/$_", $_ ] } grep(! /^\.\.?$/, readdir($DH));
closedir($DH);

sub rev_by_date { $b->[9] <=> $a->[9] }
my @sorted_files = sort rev_by_date @files;
my @newest = @{$sorted_files[0]};
my $newestfile = pop(@newest);

目前$ newestfile将是最新文件,但它是一种非首选类型,我只希望看到最新的.txt类型。

谢谢!

2 个答案:

答案 0 :(得分:1)

再次使用grep

my @files = map { [ stat "$DIR/$_", $_ ] } grep { /\.txt$/ } grep(! /^\.\.?$/, readdir($DH));

这假设您没有带.txt后缀的子目录。

这可以进一步简化,因为它会过滤掉2个点目录:

my @files = map { [ stat "$DIR/$_", $_ ] } grep { /\.txt$/ } readdir($DH);

答案 1 :(得分:0)

你也可以这样做,而不是readdir:

my @files = map { [ stat $_, $_ ] } <$DIR/*.txt>;

请参阅glob运营商。