首页 > 解决方案 > Recursivley 转到以 *TEST* 开头的目录并仅保留最新的 5 个文件夹

问题描述

这是我的目录结构。

./TEST1/automation
./TEST2_1/automation
./TEST3.4/automation
./general/automation

我只想保留以 . 开头的所有目录下的最新 5 个子文件夹TEST*/automation

目前,我的脚本如下进入每个目录并执行命令:

./TEST1/automation
ls -dt */ | tail -n +5 | xargs rm -rf
./TEST2_1/automation
ls -dt */ | tail -n +5 | xargs rm -rf
./TEST3.4/automation
ls -dt */ | tail -n +5 | xargs rm -rf

每次我们添加一个以 TEST 开头的新文件夹时,我都必须手动更新脚本。

基本上,进入所有开头的目录,TEST*/automation并且只保留最新的 5 个文件夹。

标签: linuxshell

解决方案


试试这个:

find -regex '.*/TEST.*/automation' -print0 |xargs -0 -I {} -n1 bash -c 'cd "{}"; ls -rt |  tail -n +4 | xargs -I {} echo rm -rf -- "{}"'

如果输出看起来没问题(检查它确实为您想要删除的所有文件/目录显示“rm ...”)删除echo.

警告:执行的第二部分(第一部分xargs没有明确查找目录,它还会列出文件。根据您的描述,不清楚您的automation目录是同时包含文件和目录还是仅包含目录。


推荐阅读