没有这样的文件或目录 用 find -exec rm -f {} \;

没有这样的文件或目录 用 find -exec rm -f {} \;

我有一个每天运行的清除作业来清理超过 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 ,但这也没有帮助。

目前我正在测试改变 \;按照此处的建议添加到 +:

find - 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

相关内容