Bash

遞歸刪除除一個以外的所有子文件夾

  • September 14, 2020

我想創建一個單行,它將遞歸地刪除子文件夾,保留每個子文件夾的最新目錄。這可能可以通過連結一些 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

將刪除它們。

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