BASH - 使用 rm 指令的簡單腳本不起作用

BASH - 使用 rm 指令的簡單腳本不起作用

我製作了這個簡單的腳本:

#/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}而不是僅$DATErm命令中來防止問題。

問題也可能是您試圖刪除不存在的檔案名,因為您似乎指定了兩種不同的日期輸出格式,我假設日期格式應該在 tar 的建立之間匹配檔案並在兩小時後刪除。

相關內容