Bash
遞歸刪除除一個以外的所有子文件夾
我想創建一個單行,它將遞歸地刪除子文件夾,保留每個子文件夾的最新目錄。這可能可以通過連結一些 find 和 rm 命令來實現,但我不知道如何做到這一點。我不能相信 mtime ,因為其中一些是搞砸的。第 3 級的所有目錄都以日期格式命名,如下所示:年、月、日、小時 (24h)、分鐘、秒。
範例文件夾結構
parent/a/2020-09-14_104423 parent/a/2020-08-14_230000 parent/a/2020-07-14_100000 parent/b/2020-07-14_140000 parent/b/2019-06-14_104423 parent/b/2019-05-14_104423 parent/c/2020-08-14_100000 parent/c/2019-06-14_174423 parent/c/2019-05-14_104423 ...
結果
parent/a/2020-09-14_104423 parent/b/2020-07-14_140000 parent/c/2020-08-14_100000 ...
作為一個工作單線,只考慮所描述的目錄名稱:
for dir in parent/*/; do printf "%s\n" "$dir"/*/ | sort -r | tail -n +2; done
將列出要刪除的目錄,並且
for dir in parent/*/; do printf "%s\n" "$dir"/*/ | sort -r | tail -n +2 | xargs rm -rf; done
將刪除它們。