You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何删除14天前的文件和目录并排除指定文件夹?

问题根源

你原来的命令只排除了Folder文件夹里的子内容,但Folder自身如果满足“14天未修改”的条件,会被find命中——因为./Folder这个路径并不匹配./Folder/*,所以加-delete后就会尝试删掉它。

1. 彻底排除Folder的正确命令

方式一:补全路径排除条件

直接在原有命令里加一条排除Folder自身的规则,这样既不碰它的内容,也不碰它本身:

find . -mtime +14 -not -path "./Folder" -not -path "./Folder/*" -delete

方式二:用-prune高效跳过目录

更推荐用-prune,它会直接跳过整个Folder目录的遍历(不用挨个排查里面的文件),效率更高:

find . -name "Folder" -prune -o -mtime +14 -delete

解释:-name "Folder" -prune会找到当前目录下的Folder,直接跳过它;-o是“或”的意思,后面的规则会处理所有不是Folder的、满足14天过期的文件和目录。

2. 关于非空子目录删除的问题

find的-delete参数默认是深度优先遍历的——先删目录里的所有文件和子目录,最后再删空了的父目录。所以只要命令条件对,非空子目录会被自动删干净,不用额外操作。

如果担心兼容性(比如某些系统的find版本),可以显式加上-depth参数(其实-delete已经隐含了这个参数):

find . -depth -name "Folder" -prune -o -mtime +14 -delete

3. Jenkins Groovy里的执行写法

在Groovy脚本里用sh步骤执行即可,直接把bash命令放进去:

sh '''
find . -name "Folder" -prune -o -mtime +14 -delete
'''

如果要先预览要删的内容(避免误删),可以先跑不带-delete的版本看输出:

sh '''
find . -name "Folder" -prune -o -mtime +14 -print
'''

最优实现

毫无疑问是用-prune的版本,不仅逻辑清晰,还能跳过Folder目录的遍历,比用-not -path省资源,尤其是当Folder里文件很多的时候。

内容的提问来源于stack exchange,提问作者TajniakOsz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:08:33