2015-09-23 28 views
0

我正在寫Perl,並在窗口系統中運行它相當不錯。 但是,當我將perl腳本從windows系統傳輸到Linux。 並在Linux系統中運行,我得到錯誤的日期/時間。 需要一些幫助。謝謝。想要顯示某些文件的創建時間。

的源代碼在Perl

if (($file =~ m/(\d)(\S+)\.csv/) && ($flag == 0)) 
      { 
        open(para_file,$file); 
        $datetime_string = ctime(stat($file)->ctime); 

        while ($line=<para_file>) 
        { 
        if ($line =~ /0\,170\,16\,/) 
          { 
            $cal = $cal + 1; 
          } 
        } 
          push(@data,"$cal"); 
          push(@data,"$datetime_string"); 
      }    

$文件將是我的文件名。窗口日期&創建時間是正確的,但不明白爲什麼在LINUX它給我錯誤的日期&時間。

代的輸出,從窗戶

9023-0 50000 5111 10.22 星期一07月21 17點44分38秒2014
9023-2 100000 23251 23.25 週五年04月11 10點12分19秒2014
9024_AHG 5000 0 0.00 星期四11月27日15時28分55秒2014

代的輸出,從Linux

9023-0 50000 5111 10.22 星期四07月30日16時45分25秒2015
9023-2 100000 23251 23.25 星期四07月30日16時45分25秒2015
9024_AHG 5000 0 0.00 星期四07月30日16時45分:25 2015

+0

在不同系統上訪問文件系統的方式如何?顯然你必須有某種你使用的文件服務器,或者是一個可移動的驅動器? – arkascha

+0

如果您從Windows將文件傳輸到Linux,其創建時間將會更改並顯示它們被移動的時間。 –

+2

@ChankeyPathak嚴格地說,這不會是一個舉動,而是一個副本。你不能在系統之間移動文件。這就是爲什麼實際上創建了一個新文件,它解釋了新的創建時間。一個真正的_move_實際上會保存時間。 – arkascha

回答

4

這裏的問題不是你在做什麼,而是你誤解了ctime是什麼。 Linux文件系統記錄一個變化時間不是創建時間。

mtime表示修改文件內容。 ctime表示修改屬性。因此,他們可能是相同的數字。

但是你不能得到的是「創建時間」,因爲EXT文件系統不記錄它。 (其他文件系統格式可能 - 例如NTFS - 但我不確定我會建議在Linux上使用NTFS!)

+0

如何處理Linux上的NTFS? – cs87

+0

@ cs87這是一個你應該在SuperUser或Unix/Linux上發佈的問題。 – simbabque

+1

但嚴重 - 不要,它是討厭的。只要接受創作時間並不那麼有趣或有意義。改變你的整個文件系統只是爲了獲得創建時間,對於微不足道的好處是很多痛苦的。 – Sobrique

相關問題