2012-09-16 61 views
2

在我的服務器上,日期後有一堆歸檔文件夾名稱:yyyy-mm-jj這允許您輕鬆地對文件夾進行排序並查找相關數據。如何刪除名稱小於...的文件夾?

我想刪除給定數據之前完成的所有檔案。隨着我的文件夾命名,自然排序順序爲普通排序一樣,這樣我可以依靠平時的bash結構:

if [ $foldername -lt "yyyy-mm-jj" ]; then 
    rm -r $foldername 
fi 

有沒有更有效的方式來做到這一點?

+2

不,這似乎是最好的辦法。爲什麼,你有什麼速度問題? – 2012-09-16 15:07:08

+0

您可以使用find和-mtime來查找舊文件/文件夾。 – Gregor

+0

沒有速度問題。我只尋求優雅的結構:) – yadutaf

回答

5

[ $foldername -lt "yyyy-mm-jj" ]將永遠是假的,因爲-lt是一個數值運算符:你比較字符串不是數字,所以他們都視爲0。使用<>操盤比較字符串(這是一個ksh/bash/zsh功能)。請注意,只有字符串運算符,沒有<=>=

通配符擴展以字典順序返回匹配的名稱。因此,要對最早的文件執行操作,請循環瀏覽這些文件,並在找到太近的文件時解決問題。

for dir in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do 
    if ! [[ $dir < $min_date_to_keep ]]; then break; fi 
    rm -r "$dir" 
done 
+2

+1主要是因爲這也確保只有正確命名的文件夾被檢查,並且風險更小的隨機文件夾恰好在詞典上小於正在使用的任何目標日期被刪除(例如,如果腳本在錯誤的目錄上運行時發生一些錯誤)。 –

相關問題