首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有这样的文件或目录查找-exec rm -f {} \;

没有这样的文件或目录查找-exec rm -f {} \;
EN

Unix & Linux用户
提问于 2018-01-05 18:17:20
回答 1查看 6.9K关注 0票数 5

我有一个清理工作,每天运行,清理超过30天的日志。

代码语言:javascript
复制
find /dir/app/logs -mtime +30 -exec rm -f {} \;

我要把我们的工作从cron转移到第三方的调度产品,Automic。因为移动了这个作业,我一直随机地得到错误“没有这样的文件或目录”。在收到错误后在提示符下运行find命令,但不使用-exec rm -f {} \;,则始终不返回结果并成功运行。长话短说,我无法重现这个错误。

作业通过执行以下命令来运行:

代码语言:javascript
复制
ssh user@server "find /dir/app/logs -mtime +30 -exec rm -f {} \;"

针对远程服务器。

我已经测试了各种解决方案,没有任何运气。最初,该命令不带-f运行。我理解,添加-f可以抑制错误,但我没有看到这种情况发生。我尝试用-exec {} \;替换-delete,但这也没有帮助。

目前,我正在测试是否按照这里的建议将\;改为+:

查找- exec rm对-删除

提前感谢你对这件事的洞察力。

EN

回答 1

Unix & Linux用户

发布于 2018-01-16 13:57:08

经过一段时间的休息和更多的搜索之后,这个解决方案可能解决了这个问题:

代码语言:javascript
复制
find /usr/dir/logs/ -mindepth 1 -mtime +45 -delete

findrm似乎包含了父目录,并试图首先删除它,这解释了为什么有时会工作,然后抛出丢失的文件/目录错误。使用-delete可以很好地工作,添加-mindepth 1会使它跳过父级。

若要保留不应删除的子目录,请添加-type f以只查看那些保留的文件。此外,有一个实例需要忽略特定的文件。这似乎适用于这种情况:

代码语言:javascript
复制
find /usr/dir/logs/ -mindepth 1 -type f \( ! -name "ignoreme*" \) -mtime +30 -delete
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/415044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档