如何查找并删除指定.sql文件,仅保留最新的3个?
保留最新3个.sql文件并删除其余文件的解决方案
需求:删除目录下所有.sql文件,仅保留修改时间最新的3个。当前目录结构如下:
├── db1 │ └── db.sql ├── db2 │ ├── db2.sql │ └── db3.sql ├── db5.sql ├── emptydir1 ├── emptydir2 ├── emptydir4 ├── emptydir5 ├── emptyri3 ├── filenam2 ├── filenam3 ├── filename ├── filename4 ├── filename5 ├── find_db.sh └── noemptydir1 └── database.sql
已尝试的方法及问题
- 使用
find . -name "*.sql" -type f -ls | sort可列出所有目标文件,但直接添加-delete参数会删除全部.sql文件,无法保留最新的3个。 - 尝试
rm ls -t | awk 'NR>3',该命令无法正确定位并删除目标文件。
可行解决方案
使用以下命令即可实现需求:
rm `find . -name "*.sql" | xargs ls -lt | awk '{print $NF}' | tail -n +4`
命令各部分解释:
find . -name "*.sql":递归查找当前目录下所有.sql文件。xargs ls -lt:将找到的文件路径传递给ls -lt,按修改时间从新到旧排序。awk '{print $NF}':提取排序后每行的最后一列(即文件路径)。tail -n +4:从第4行开始输出,排除前3个最新的文件。- 反引号
`包裹的部分会优先执行,将需要删除的文件路径传递给rm命令完成删除操作。
内容的提问来源于stack exchange,提问作者Frendom
相关产品推荐
相关产品推荐

