2015-04-21 23 views
-1

我寫了這個來檢查是否有在某個目錄下創建的文件,並給我最新的文件,我該如何修改我的正則表達式來只拾取某個文件類型的最新文件*(只說.txt)如何從一個與文件類型匹配的特定目錄過濾最近發生的文件名?

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類型。

謝謝!

回答

1

使用grep再次:

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

這裏假設你有一個.txt後綴沒有子目錄。

這可以進一步簡化,因爲它會過濾掉2點目錄:

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

哇!哇!我不知道你可以像這樣嵌套grep?讓我嘗試。 – YouHaveaBigEgo

+0

是的。就像你鏈接地圖和grep一樣,你可以保持接受和返回列表的鏈接Perl函數。 – toolic

+0

整潔..這工作。謝謝@toolic – YouHaveaBigEgo

0

你也可以做,而不是READDIR:

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

glob運營商。

相關問題