我有一个每天运行的清除作业来清理超过 30 天的日志。
find /dir/app/logs -mtime +30 -exec rm -f {} \;
我正在将我们的工作从 cron 转移到第 3 方调度产品 Automic。自从移动这项工作以来,我不断收到错误“没有这样的文件或目录”。收到错误后在提示符下运行find命令,如果不加-exec rm -f {} \;,总是不返回结果,运行成功。长话短说,我无法重现该错误。
该作业通过执行以下命令来运行:
ssh user@server "find /dir/app/logs -mtime +30 -exec rm -f {} \;"
针对远程服务器。
我测试了各种解决方案,但没有任何运气。最初,该命令在没有 -f 的情况下运行。据我所知,添加 -f 应该可以抑制错误,但我没有看到这种情况发生。我尝试替换 -exec rm {} \;与 -delete ,但这也没有帮助。
目前我正在测试改变 \;按照此处的建议添加到 +:
预先感谢您对正在发生的事情的任何了解。
答案1
经过一段时间的休息和更多的谷歌搜索后,这个解决方案可能会解决这个问题:
find /usr/dir/logs/ -mindepth 1 -mtime +45 -delete
它似乎find
包含rm
父目录并尝试首先删除它,这解释了为什么它有时有效,然后会抛出丢失文件/目录错误。使用-delete
效果很好,添加-mindepth 1
导致它跳过父级。
要保留不应删除的子目录,请添加“-type f
仅查看保留这些文件”的文件。此外,还有一种情况需要忽略特定文件。这似乎适用于这种情况:
find /usr/dir/logs/ -mindepth 1 -type f \( ! -name "ignoreme*" \) -mtime +30 -delete