2013-10-17 64 views
1

我想通過perl獲取上次修改日期和時間的文件夾。我的代碼是:無法獲取上次修改時間的文件夾

my @dirs = grep { -d } glob "$SOME_DIR/*"; 
foreach my $dir (@dirs) 
{ 
    print($dir); 
    print((stat $dir)[9]); #line got problem with 
} 

但它只是在$ SOME_DIR下打印的只是子文件。自打印($ dir)起作用後,我確定存在$ SOME_DIR路徑。有誰知道什麼不能得到目錄的最後修改時間?謝謝!

+1

你能告訴什麼'$ SOME_DIR'樣子,你的輸出是什麼樣子?我無法重現這個問題。 – dms

+0

在stat()調用失敗後,你可以看看'$!'嗎? –

+0

我明白了,謝謝大家。刪除使用File :: stat後,它工作正常。 – Ben

回答

1

對我來說,與$SOME_DIR = ".";,我得到的輸出:

./c-vs-c++1369283477./computist-1.dSYM1381934424./computist-2.dSYM1381934897./ll3.dSYM1381816690./syncio.dSYM1381984813./xs.dSYM1381986208 

這mildy修改後的代碼:

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

my $SOME_DIR = "."; 

my @dirs = grep { -d } glob "$SOME_DIR/*"; 
foreach my $dir (@dirs) 
{ 
    printf "%-20s - %d\n", $dir, (stat $dir)[9]; 
} 

給輸出:

./c-vs-c++   - 1369283477 
./computist-1.dSYM - 1381934424 
./computist-2.dSYM - 1381934897 
./ll3.dSYM   - 1381816690 
./syncio.dSYM  - 1381984813 
./xs.dSYM   - 1381986208 

你需要證明什麼在你的$SOME_DIR。例如,您可以使用:

system "ls -l $SOME_DIR"; 

顯示您應該看到的內容。

+0

我得到了我的$ SOME_DIR下的子文件夾列表:fullDate1,fullDate2,fullDate3 – Ben

+0

使用'my @dirs = glob「$ SOME_DIR/* /」'不是更簡單嗎,還是不適用於所有操作系統? –

+0

很可能......我主要是通過創建一個SSCCE([Short,Self-Contained,Correct Example](http://sscce.org/))來說明問題中描述的代碼可以工作。問題似乎是使用['File :: stat'](http://perldoc.perl.org/File/stat.html)。 grep找到目錄('-d'測試)。否則,測試將需要在循環體中完成。 –

1

試試這個: -

#!/usr/bin/perl 

    @1=`ls -ltr abcdpathtodir | grep ^d | awk '{\$1=\$2=\$3=\$4=\$5=""; print \$0}'`; 
    foreach $i (@1) 
    { 
      print " ---$i\n"; 
    } 

或其他方式: -

@m=`ls -ltr dir | grep ^d | awk '{print \$6,\$7,\$8,\$9}'`; 
foreach $i (@m) 
{ 
     print "$i\n"; 

} 
+0

使用數字作爲數組名稱,並且根據shell命令在bash和類似文件中編寫腳本時有意義,但在perl中,它是不必要的依賴項。 –

+0

感謝您的評論...只要數組的名稱被認爲是我們可以改變,但在這種情況下,shell命令可以正常工作......你有這樣短的代碼長度的解決方案我會很高興學習從那個....... – pkm

+0

檢查http://stackoverflow.com/a/19418840/223226它使用Perl本地'glob()'目錄列表,篩選目錄與'-d'和'stat()'獲得修改時間 –

相關問題