
我製作了這個簡單的腳本:
#/bin/bash
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
tar -czvf /kopie/bin-$DATE.tar /bin
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
rm -f /kopie/bin-$DATE*.tar
我對腳本的最後一行有問題。 rm 指令不起作用,它不會刪除檔案。 「2 小時前」的日期效果很好,所以這不是問題。
答案1
您似乎以兩種不同的方式指定檔案名稱:
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
上面,例如年和小時之間有一個_。
但您產生的日期具有不同的格式:
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
然而,這仍然不能解決「約會」的固有問題。或多或少兩小時前”,因為從 13:00:00 到 12:59:59 需要一秒鐘,無論如何,這與“2017-11-20_13*”模式不匹配。
我會考慮使用find
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
應該殺死當前目錄中超過兩小時的所有 *.tar 檔案(使用 +119 獲得一分鐘的寬限時間)。另外,-delete
在測試此方法是否有效時,您可以省略。
答案2
我認為問題出$DATE
在最後一行變數的擴展。要測試這一點,您可以簡單地echo
在命令前面新增rm
並執行腳本,或者您可以嘗試透過使用${DATE}
而不是僅$DATE
在rm
命令中來防止問題。
問題也可能是您試圖刪除不存在的檔案名,因為您似乎指定了兩種不同的日期輸出格式,我假設日期格式應該在 tar 的建立之間匹配檔案並在兩小時後刪除。