2014-07-23 83 views
6

關於如何刪除Linux上超過x分鐘/小時/天的文件有很多問題,但沒有人能達到秒分辨率。如何在shell上刪除x秒以上(不是幾天,幾小時或幾分鐘)的文件?

我發現這個解決方案:

for file in `ls -ltr --time-style=+%s | awk '{now=systime(); del_time=now-30; if($6<del_time && $5=="0") print $7}'` ;do 
    rm -f $file >/dev/null 2>&1 
done 

systime()上不存在awk

「功能SYSTIME從來沒有定義」

但在gawk這我不能不會安裝在Ubuntu 13.xx上(並且不會安裝任何額外的軟件)。

回答

16

解析的ls輸出始終是一個不錯的辦法爲recomended。尤其是當find從GNU查找工具組是能夠通過自身完成所有的工作:

$ find -not -newermt '-30 seconds' -delete 
+1

這非常棒!謝謝。 – Parmaia

-1

我找到了一個解決辦法是更換systime()命令,並使用date +%s這樣的:

for file in $(ls -ltr --time-style=+%s | awk '{cmd="date +%s"; cmd|getline now; close(cmd);del_time=now-30; if($6<del_time) print $7}') ;do 
    rm -f $file >/dev/null 2>&1 
done 

關鍵是要捕捉的date +%s輸出內部awk和使用cmd="date +%s"; cmd|getline now; close(cmd)是唯一的(真正第一)的方式我找到了。

編輯:我改變了對反引號括號,由@Jotne

+1

你不應該使用陳舊過時backtics,使用括號是這樣的:'在$文件(LS -ltr --time式= +%s | awk'{cmd =「date +%s」; cmd | getline now; close(cmd); del_time = now-30; if($ 6 Jotne

+5

永遠不要解析輸出來自ls ...文件名可以包含奇怪的字符(比如'\ n' ... – jm666

+0

如果你想要,因爲每個文件名都在不同的行上,你可以解析ls -ltr。如果你想要作爲功能,你也可以使用反引號 –

相關問題