2013-03-07 51 views
0

好吧,所以我想要做的是,我所有的備份文件夾都被命名爲日期03-07-13。所以我想選擇一天,如果它大於或等於7天,它將被刪除。這是我到目前爲止,但它不工作。獲取文件夾的名稱並與bash中的整數進行比較

DATE=$(date +"%d") 

for i in /media/backupdrive/*; do 
    DAY=${i:22:2} 
    if [ "$DAY" -ge "7" ] 
    then 
     echo "day greater than 7"; 
    fi 
done 

22:2切斷/媒體/ backupdrive/00-

00爲月份的

現在它只是檢查它是否大於7,如果是,它打印出來。

編輯:問題已解決。我想感謝大家幫助bash初學者。再次感謝你!

+0

...所以你的問題是什麼? – 2013-03-07 19:23:49

+0

抱歉沒有分享。 IT表示「在if語句行上預期會有整數表達式,我需要將DAY變量作爲一個整數來與當前日期進行比較,並且它是否大於或等於7. – user2142183 2013-03-07 19:25:49

+0

如果在您的內部執行'echo $ DAY;'循環,什麼值? – newfurniturey 2013-03-07 19:26:58

回答

1

每一個評論給出的截圖,您的實際代碼使用瞭如下:關於DAY$day之間的市值差異

DAY=${i:22:2} 
if [ "$day" -ge "7" ] 

重點。當它運行時,它試圖將空字符串與字符串(或通過-ge的「數字」)進行比較,並且這個將導致您收到的錯誤。

嘗試更新if語句中使用大寫版本:

if [ "$DAY" -ge "7" ] 
+0

你們不知道我有多少麻煩,感謝幫助初學者進步!!!!! – user2142183 2013-03-07 19:54:39

0

使用「DAY」變量可以打開「剛剛翻轉」的問題。

一些替代方案:

  • 更改文件夾格式,使其更具描述。
  • 在每個文件夾中添加一個元文件,該文件給出了一個更易於解析和處理的時間值。
  • 具有包含所述數據的備份文件夾的索引。

時間格式我通常使用包括以下:

[epoch seconds]-[YYYY][MM][DD]-[HH]:[MM]:[SS] 

這可以讓你做這樣的事情,要求備份是7天前從現在。你會在數秒內完成數學運算,這可以避免數天翻滾的混亂。

基本上,這個紀元秒是爲了使時間計算更容易。其他時間戳位使得它可讀。排序使它能夠在文件夾列表中正確排序。

編輯:

在您的備份路徑都沒有改變的情況下:

DAYtmp=${i: -8:5} 
    DAY=${DAYtmp: -2} 

這將產生日,從文件夾名稱如果父路徑長度改變。

1

看來要刪除那些超過7天以上的文件。find命令可以爲您找到這些文件,並可以選擇刪除它們:

find /media/backupdrive -mtime +7   # Files that are older than 7 days 
find /media/backupdrive -mtime +7 -delete # ... and delete them 
相關問題