我有一个清理工作,每天运行,清理超过30天的日志。
find /dir/app/logs -mtime +30 -exec rm -f {} \;我要把我们的工作从cron转移到第三方的调度产品,Automic。因为移动了这个作业,我一直随机地得到错误“没有这样的文件或目录”。在收到错误后在提示符下运行find命令,但不使用-exec rm -f {} \;,则始终不返回结果并成功运行。长话短说,我无法重现这个错误。
作业通过执行以下命令来运行:
ssh user@server "find /dir/app/logs -mtime +30 -exec rm -f {} \;"针对远程服务器。
我已经测试了各种解决方案,没有任何运气。最初,该命令不带-f运行。我理解,添加-f可以抑制错误,但我没有看到这种情况发生。我尝试用-exec {} \;替换-delete,但这也没有帮助。
目前,我正在测试是否按照这里的建议将\;改为+:
提前感谢你对这件事的洞察力。
发布于 2018-01-16 13:57:08
经过一段时间的休息和更多的搜索之后,这个解决方案可能解决了这个问题:
find /usr/dir/logs/ -mindepth 1 -mtime +45 -deletefind和rm似乎包含了父目录,并试图首先删除它,这解释了为什么有时会工作,然后抛出丢失的文件/目录错误。使用-delete可以很好地工作,添加-mindepth 1会使它跳过父级。
若要保留不应删除的子目录,请添加-type f以只查看那些保留的文件。此外,有一个实例需要忽略特定的文件。这似乎适用于这种情况:
find /usr/dir/logs/ -mindepth 1 -type f \( ! -name "ignoreme*" \) -mtime +30 -deletehttps://unix.stackexchange.com/questions/415044
复制相似问题