2011-01-23 30 views
21

我很清楚能夠做到find myfile.txt -mtime +5來檢查我的文件是否超過5天。不過,我希望在myfile.txt的數天內獲取mtime並將其存儲到變量中以供進一步使用。我會怎麼做?bash - 獲取特定文件的mtime?

回答

43

stat可以給你這些信息:

filemtime=`stat -c %Y myfile.txt` 

%Y給你最後一次修改爲「自大紀元秒」,但也有很多其他的選擇; more info。啊,你要在幾天的時間,因爲它被修改:因此,如果該文件是在15:30 GMT在2011-01-22修改,上面會在1295710237.

編輯的區域返回數量。這將變得更加複雜,尤其是因爲「一天」不是固定的時間段(有些「日」只有23小時,其他時間由於夏令時而有所增加)。

天真版本可能是這樣的:

filemtime=`stat -c %Y $1` 
currtime=`date +%s` 
diff=$(((currtime - filemtime)/86400)) 
echo $diff 

...但同樣,這是假設每天總是恰好86400秒長。

關於在bash中的算術的更多信息here

+0

這很可愛,不幸的是我已經做了一個傻瓜,忘記了我需要在幾天的時間。那可能嗎? – Industrial 2011-01-23 14:46:49

+0

@Industrial:一旦你有了價值,你就可以對它進行數學運算。我沒有按照你的意思,「...在幾天的時間。」 (從什麼時候開始?你的意思是,幾天前它被修改了?) – 2011-01-23 14:48:30

2

我這個答案?

A=$(stat -c "%y" myfile.txt) 

看看統計的幫助

stat --help 
Usage: stat [OPTION]... FILE... 
Display file or file system status. 
[...] 
-c --format=FORMAT use the specified FORMAT instead of the default; 
         output a newline after each use of FORMAT 
[...] 
The valid format sequences for files 
[...] 
    %y Time of last modification, human-readable 
    %Y Time of last modification, seconds since Epoch 
[...] 
3
AGE=$(perl -e 'print -M $ARGV[0]' $file) 

將$ AGE設置爲$文件的日齡,如Perl的-M運營商處理stat呼叫,並轉換爲天爲您。

返回值是一個浮點值(例如6.62849537天)。添加int來表達,如果你需要有一個整數結果

AGE=$(perl -e 'print int -M $ARGV[0]' $file) 

Ruby和Python也有他們的俏皮話來統計一個文件,並返回一些數據,但我相信Perl有最簡潔的方式。