Linux

使用 find 命令或其他任何東西刪除目錄

  • April 28, 2020

我正在嘗試編寫一個僅保留最後 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 個之外的所有備份目錄。

(注意:如果您的目錄名稱包含空格,則此命令將不起作用。始終先測試創建假目錄並嘗試此命令。)

引用自:https://unix.stackexchange.com/questions/583038