Linux
使用 find 命令或其他任何東西刪除目錄
我正在嘗試編寫一個僅保留最後 2 個備份並刪除剩餘目錄的命令。
directory path = /apps/
以下是目錄,我只想保留
source
source_2020-01-13
source_2019-12-09
目錄並刪除舊的。該腳本將使用 cron 在 100 多台伺服器上執行。
這裡的問題是,在
find
命令中我將無法添加mtime
刪除舊目錄 - 為什麼因為備份目錄時間戳在所有伺服器上都不同。基本上,命令/腳本應該保留最後兩個具有 source_YYYY_MM_DD 名稱的備份目錄,並刪除其餘的。有人可以幫忙嗎?
注意:Source_YYYY_MM_DD是備份目錄。
drwx------ 11 root root 4096 Jul 22 2019 source_2019-07-22 drwx------ 11 root root 4096 Jul 29 2019 source_2019-07-29 drwx------ 11 root root 4096 Aug 5 2019 source_2019-08-05 drwx------ 11 root root 4096 Aug 14 2019 source_2019-08-14 drwx------ 11 root root 4096 Oct 14 2019 source_2019-10-14 drwx------ 11 root root 4096 Dec 9 03:59 source_2019-12-09 drwx------ 11 root root 4096 Jan 13 05:20 source_2020-01-13 drwxr-x--- 12 root root 4096 Apr 21 09:11 source
ls -d1 /apps/source_20??-??-??/ | head -n -2 | xargs rm -rf
Whereby
ls -d1 /apps/source_20??-??-??/
將僅按排序順序列出匹配的目錄,
head -n -2
將取出最後兩個條目,
xargs rm -rf
然後刪除目錄。
find /apps/ -type d -not -name source -name "source*" -print | sort | head -n -2 | xargs rm -rfv
find apps/ -type d -not -name source -name "source*" -print
將找到所有備份目錄,確保source
該命令未被拾取find
。
sort
將排序,確保最新的排在最後。這不是基於修改時間,而是基於目錄名稱。
head -n -2
獲取所有目錄,期望最後 2 個備份目錄。
xargs rm -rfv
刪除除上一個命令過濾的最後 2 個之外的所有備份目錄。(注意:如果您的目錄名稱包含空格,則此命令將不起作用。始終先測試創建假目錄並嘗試此命令。)