Shell脚本中find命令-delete删除功能不生效问题求助
find命令删除过期文件不生效问题排查与解决
核心原因分析
- 时间匹配规则问题:
find的-mtime +5参数匹配的是修改时间距当前时间超过5个完整24小时的文件,你提供的文件修改时间为9月16日,若执行脚本的时间距9月16日不足120小时,不会匹配到任何文件,此时echo $?返回0是find无匹配文件的正常返回,不是执行报错。 - 匹配范围限制:你加了
-name "*.*"参数,只会匹配带后缀名的文件,若目录下存在无后缀的文件会被过滤掉,不符合你「删除所有修改时间超5天的文件」的需求。 - 权限不足:你目录下文件的属主为
abc-user,若执行脚本的用户不是abc-user也不是root,没有文件的删除权限,就算匹配到文件也会删除失败,此时$?会返回非0值。
排查步骤
- 先执行
date确认当前系统时间,计算与文件修改时间的间隔是否确实超过5天。 - 先去掉
-delete参数执行find命令,验证是否有匹配的文件输出:
find /home/tmp/Deltest -name "*.*" -type f -mtime +5
如果无任何输出,说明没有符合条件的文件,删除功能本身正常。
3. 手动切换到执行脚本的用户,尝试手动删除目录下的测试文件,验证是否有删除权限。
优化后的脚本
如果需要按自然天(当日零点起算)计算超期时间,匹配所有类型文件,可使用以下脚本:
#!/bin/bash echo "hi1" # -daystart 从当日零点开始计算时间,移除-name参数匹配所有文件 find /home/tmp/Deltest -type f -mtime +5 -daystart -delete echo "find命令退出码:$?" # 可选:执行后列出目录文件验证结果 ls -l /home/tmp/Deltest
内容的提问来源于stack exchange,提问作者Srinivasan
相关产品推荐
相关产品推荐

