Linux
刪除指定名稱長度的子目錄
我有一個自動部署腳本,它將 git 送出到某個分支,編譯並上傳存檔的二進制對像到雲(S3)。稍後,腳本登錄到 EC2 實例並下載檔案並執行/啟動項目/伺服器。
到目前為止,這是完美無缺的。最近,我遇到了磁碟空間問題。由於我還儲存日誌並維護目前/以前的工作送出,因此我的目錄結構類似於:
/path /current/ <- symlink /prev/ <- symlink /HASH00001/ /HASH00002/ /HASH00003/ /HASH00004/ /HASH00005/ /.../ /.../ /HASH0000n/ /some.log /some.log.1 /some.log.2.gz /...
為了維護,我想刪除所有包含
/path
特定 git commit SHA 值的子目錄。但是,有一個警告,不應該刪除被指向的目錄current
和符號連結。prev
到目前為止,我在面臨儲存問題的任何機器上手動執行此操作。我希望我的部署腳本也能處理這一步。
我正在使用
ls
命令並根據上次訪問時間戳對結果進行排序:ls -drt | head -n -4
和管道連接
xargs rm -rf
到它。我現在正在考慮對其進行修改,以便僅列出長度正好為 40 個字元的目錄名稱,然後刪除目錄。符號連結到
current
和prev
。我能否獲得一些關於如何實現相同目標的指示!
PATH
這應該在您的目錄下方列出每個 40 個字元長的文件夾,不包括指向的文件夾current
和prev
符號連結cd PATH find . -type d -name '????????????????????????????????????????' ! -name $(readlink current) ! -name $(readlink prev) -prune
然後,
-delete
如果您find
支持它或將其通過管道xargs rm -rf
注意:模式應該是 40
?
。