2010-11-11 39 views
3

我寫了一個bash shell腳本,其中的一部分是使用find命令檢查文件是否超過30天,很遺憾,當我將它上載到我的因爲find命令被鎖定,所以它不工作。檢查一個文件是否超過30天沒有find命令

有沒有人知道如何檢查文件是否超過30天沒有find命令?

我想我需要做一個「ls -a $文件名」,然後解析日期字符串,將其轉換爲unix日期,然後將其與今天的日期進行比較,但我在unix非常生疏。

感謝

回答

6

stat -c %Z filename給,如果你想的最後修改時間在unixtime

stat -c %Y filename上次更改時間。

+0

感謝大家好,我不知道該命令。應該是-f格式化爲-c不是我機器上的選項? – 2010-11-11 08:30:41

+0

可能是:) – Kimvais 2010-11-11 08:41:43

+0

好吧,你如何比較今天的日期來檢查是否> 30天? – 2010-11-12 08:01:21

0

ls輸出UNIX時間戳,就像這樣:

ls -l --time-style='+%s' 

然後從輸出中獲取的時間戳,以及simlpy計算是否有當前時間和時間戳之間的30 60秒從ls

可以使用

date '+%s'; 
+0

嗨,謝謝,但我無法得到該命令的工作,我得到「ls:非法選項 - - 」 – 2010-11-12 08:23:21

+0

Sjoerd的解決方案意味着一個GNU LS - 這顯然是海報沒有。 – 2010-11-12 19:34:52

2

您可以使用if [ $file -ot $timestamp_file ]-ot意思是 「比老」)獲得當前的時間戳。您將不得不構建適當的文件,例如touch(需要時間戳選項)。如果這是一項週期性任務,您還可以在每次運行時創建時間戳文件以供下次使用。

+0

好的,謝謝,你知道我30天前如何得到日期,以便我可以將它傳遞給touch命令嗎? – 2010-11-12 08:14:39

+1

@ The Frog Daddy:'touch -d「$(date -d'30 days ago')」30DAYSAGO' – 2010-11-12 19:34:03

-1

確定這就是我到底是怎麼做的?

  1. 我感動文件與今天的日期 - 1個月。

touch -t "$(date -v -1m +%Y%m%d%H%M)" ${DATEFILE}

  1. 比在2檔測試有沒有舊的。

if [ ${SERVERFILE} -ot ${DATEFILE} ]

謝謝大家。

0

這並不在Linux下工作:日期沒有-v選項

t=`date +%Y%m%d%H%M` 
let u=$t-1000000 
touch -t "$u" $DATEFILE 
if [ $SERVERFILE -ot $DATEFILE ]; then 
    rm $SERVERFILE 
fi 
+0

「That」是指另一個答案。答覆的順序可能會發生變化,因此應該將其作爲註釋提交 - 儘管您可能還不能評論。 – philant 2013-11-10 08:33:18

相關問題