Linux

刪除指定名稱長度的子目錄

  • November 10, 2016

我有一個自動部署腳本,它將 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 個字元的目錄名稱,然後刪除目錄。符號連結到currentprev

我能否獲得一些關於如何實現相同目標的指示!

PATH這應該在您的目錄下方列出每個 40 個字元長的文件夾,不包括指向的文件夾currentprev符號連結

cd PATH
find . -type d -name '????????????????????????????????????????' ! -name $(readlink current) ! -name $(readlink prev) -prune

然後,-delete如果您find支持它或將其通過管道xargs rm -rf

注意:模式應該是 40 ?

引用自:https://serverfault.com/questions/814046