Linux
查找以 YYYY-MM-DD 命名的早於 X 天的目錄,如果存在則刪除
X
我嘗試創建一個 bash 內襯腳本,該腳本根據文件名查找並刪除早於幾天的目錄,如果目錄存在,則程式碼可以完美執行。唯一的問題是,如果目錄不存在,它會嘗試刪除它並出錯:find: ‘/var/www/html/resources/cache/2022-02-08’: No such file or directory
雖然我已經在 find 命令的結果中設置了檢查目錄是否存在然後刪除它的條件。
find '/var/www/html/resources/cache/' -type d -name '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' -exec sh -c 'd={}; [ "$(date -d "6 days ago" +%Y-%m-%d)" ">" "$(basename $d)" ] && [ -d $d ] && rm -rf $d' \;
假設我有以下目錄位於
/var/www/html/resources/cache
2022-02-08 2022-02-09 2022-02-10 2022-02-11 2022-02-12 2022-02-13 2022-02-14 2022-02-15
[ "$(date -d "6 days ago" +%Y-%m-%d)" ">" "$(basename $d)" ]
檢查文件名是否超過 6 天
[ -d $d ]
檢查它是否是一個目錄
您可以使用
xargs
命令而不是-exec
選項find
。find '/var/www/html/resources/cache/' -type d -name '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | xargs -I {} sh -c 'd={}; [ "$(date -d "6 days ago" +%Y-%m-%d)" ">" "$(basename $d)" ] && [ -d $d ] && rm -rf $d'
上面的程式碼塊可以工作,但它可能會
123
作為值返回。 當任何重複的命令出錯時,xargs
命令返回。123
因此,如果甚至一個目錄名稱不是六天前,就會發生錯誤。find '/var/www/html/resources/cache/' -type d -name '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | xargs -I {} sh -c 'd={}; if [ "$(date -d "6 days ago" +%Y-%m-%d)" ">" "$(basename $d)" ]; then [ -d $d ] && rm -rf $d; fi'
您可以用語句替換條件
if
來解決此問題。