2014-07-25 295 views
0

我正在嘗試構建一個代碼來查找目錄中最新的文件。我已經搜索了一些解決方案,但我仍然無法讓代碼工作。我正在嘗試查找最新的xml文件。在目錄中查找最新的文件

#!/usr/bin/perl 
use warnings; 
use strict; 

my $dir_INFO  = '/local/nelly/INFO'; 
my $dir_InfoNames = '/local/data/InfoNames'; 

#Open INFO 
opendir(DIR, $dir_INFO) or die "can't opendir INFO"; 
my @files = grep { !/\./ } readdir(DIR); 
foreach my $file (@files) { 
    my $dir3 = "/local/nelly/INFO/$file/XML"; 
    opendir(DIR, $dir3) or die "can't opendir XML"; 
    my @files2 = grep { /.xml/ } readdir(DIR); 
    for my $files2 (@files2) { 
     open(FILES2, "<", "/local/nelly/INFO/$file/XML/$files2") or die "could not open $files2 \n"; 
     while (<FILES2>) { 
      #sort by modification time 
      my %new = map(($_, "$dir3\\$_"), my @xmls); 
      @xmls = sort { $new{$a} <=> $new{$b} } @xmls; 
      print "$xmls[0]"; 
      my $locations = $xmls[0]; 
     } 
    } 
} 

回答

0

您是否在使用Linux,是否可以使用外部進程?如果是這樣,那麼你可以使用這個:

# list files in folder with 'ls' command, use '-c' option to sort by creation time 
open(F, "ls -ct1 |"); 
# process lines that get returned one by one 
while(<F>) { 
    chomp(); 
    print "$_\n"; 
} 
close(F); 
+0

是的,我使用Linux – user3797544

+0

是我遇到的另一個問題是,它不會做這種目錄「/本地/奈/ INFO/$文件/ XML/$ files2」的。我不知道爲什麼,但它繼續在Desktop上做文件。我的代碼不斷彈出。 – user3797544

1

只需使用File::stat獲得對象表示通過mtime排序的文件列表。

請注意,爲了stat文件,必須提供一個文件系統邏輯引用。換句話說,可能需要完整的路徑。因此,我會經常使用文件glob來獲取列表,因爲這會自動在文件名中包含路徑信息。

use strict; 
use warnings; 

use File::stat; 

my @files = sort {stat($a)->mtime <=> stat($b)->mtime} glob('*.pl'); 

print "Youngest = $files[0]\n"; 
print "Oldest = $files[-1]\n"; 
+0

glob('*。xml')'因爲OP試圖找到XML文件? – NigoroJr

相關問題