linux - 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 个文件夹。
解决方案
试试这个:
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
目录是同时包含文件和目录还是仅包含目录。
推荐阅读
- python - Matplotlib pyplot 从张量中保存多个图像
- python - pytables 添加重复的子类作为列
- powershell - PowerShell:如何按顺序附加文本文件?
- python - 如何创建具有可变数量“for”循环的函数,每个循环都有不同的索引?
- java - Java 等效于 Spring XML 配置
- kivy - 了解 KivyMD 屏幕布局
- flutter - 创建一个不依赖web的flutter项目
- javascript - vue2-timepicker 包在 vue.js 中无法正常工作
- css - 如何在 sass unsing sass 模块功能中创建多个主题?
- python - 如何将文件中的 IP 地址列表从 xxxx-xxxx 扩展为 xxxx-x 格式?