2013-01-08 66 views
1

我需要一個bash腳本來獲取給定目錄中最新文件的年齡(以小時或秒爲單位)。例如:Bash:計算目錄中最新文件的年齡

-rw-r--r-- 1 root root 3.0M 2012-12-31 12:36 2012_12_31_1236_redis_dump_encrypted.tgz 
-rw-r--r-- 1 root root 2.8M 2013-01-01 11:33 2013_01_01_1133_redis_dump_encrypted.tgz 
-rw-r--r-- 1 root root 2.4M 2013-01-04 14:17 2013_01_04_1417_redis_dump_encrypted.tgz 
-rw-r--r-- 1 root root 2.7M 2013-01-05 12:26 2013_01_05_1226_redis_dump_encrypted.tgz 
-rw-r--r-- 1 root root 54M 2013-01-06 14:16 2013_01_06_1415_redis_dump_encrypted.tgz 
-rw-r--r-- 1 root root 3.7M 2013-01-07 16:42 2013_01_07_1642_redis_dump_encrypted.tgz 
-rw-r--r-- 1 root root 3.4M 2013-01-08 12:36 2013_01_08_1236_redis_dump_encrypted.tgz 

命令應該接受目錄的路徑,並返回多少秒,因爲最新的文件(2013_01_08_1236_redis_dump_encrypted.tgz)創建過去了。

我需要這個,以便用zabbix監視最新備份的使用期限(我希望在備份機制中斷的情況下提醒)。單線程將會很棒,因爲使用zabbix用戶參數更具說服力,但不是必需的。

謝謝!

+1

爲什麼特別是一行? –

+0

@Brian阿格紐,好吧,沒有必要,它可以是一個課程腳本。一個襯墊更適合與zabbix用戶參數一起使用。我將編輯該問題。 –

回答

0

這可能是有點脆弱,但應在$DIR返回年齡在最新的文件(或目錄)的秒:

echo $(($(date +%s) - $(ls -t $DIR | head -1 | xargs stat -f %a -t %s))) 

的%的時間格式是因爲時代的秒數,這樣上面的行獲取最新文件的名稱(​​),獲取自紀元(stat -f %a -t %s)以來的最近訪問時間(以秒爲單位),並從當前時間(以秒爲單位)減去自紀元以來的時間。

+0

感謝您的回答。但是這是我得到的:stat:不能讀取'%a'的文件系統信息:沒有這樣的文件或目錄 stat:無法讀取'%s'的文件系統信息:沒有這樣的文件或目錄 -bash:1357643612 - 2013_01_08_1236_redis_dump_encrypted:基值太高(錯誤標記爲「2013_01_08_1236_redis_dump_encrypted」) –

+0

看起來您可能有額外的'''字符?首先嚐試'stat -f%a -t%s 2013_01_08_1236_redis_dump_encrypted.tgz'來確認'stat'本身是否有效。 –

3

Perl來救援:

perl -le '$d=shift;chomp($f=(`ls -t $d/*`)[0]);print 24*60*60*-M$f' /path/to/dir 
0

它返回秒,文件名年齡。

stat -c "%Y %n" -- * | sort -rn | awk -v d=$(date +%s) 'NR==1 {print (d-$1), $2; exit}' 
1

這是舊帖子,但也許它有助於某人。

我用下面的方法小時來計算時間的文件

echo $((($(date +%s) - $(stat -c %Y filen.name))/(60*60) )) 

日期+%S - 給秒自1970-01-01 00:00:00 UTC

統計-c% Y - 對參數

中的文件給出相同的結果這不適用於OS X和BSD,stat沒有-c選項,但大多數Linux發行版應該可以。