这是我的目录结构。
./TEST1/automation
./TEST2_1/automation
./TEST3.4/automation
./general/automation
我只想在所有以TEST*/automation
开头的目录下保留最新的5个子文件夹。
目前,我的脚本进入如下每个目录并执行命令:
./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个文件夹。
试试这个:
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
目录是同时包含文件和目录,还是仅包含目录。