我想创建一个单行,它将递归删除子文件夹,保留每个子文件夹的最新目录。这可能可以通过链接一些 find 和 rm 命令来实现,但我不知道如何做到这一点。我不能相信 mtime 这件事,因为其中一些是混乱的。第三层的所有目录都以日期格式命名,如下所示:年、月、日、时(24 小时)、分、秒。
文件夹结构示例
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
...
答案1
作为一个工作单行,仅考虑所描述的目录名称:
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
将删除它们。