如何抑制“查找”命令中的某些错误消息?

如何抑制“查找”命令中的某些错误消息?

find /var/log/myfile.*.txt -type f

如果没有与该模式匹配的文件,我会收到类似这样的错误日志No such file or directory

2>/dev/null问题:我怎样才能只阻止此错误消息?我当然可以在末尾添加,但这样会抑制任何错误。我怎样才能忽略提到的错误?

因为我有一个 cronjob,它会定期删除一些文件,并且如果没有文件,则会始终记录错误:

@daily find /var/log/myfile.*.txt -mtime +7 -delete

答案1

在这种情况下正确的做法是根本不触发此消息。

当你在 shell 中运行这个

find /var/log/myfile.*.txt -type f

/var/log/myfile.*.txt由 shell 扩展;若无匹配则find获取扩展对象或文字。后一种情况触发。/var/log/myfile.*.txtNo such file or directory

您可以先创建一个虚拟文件:(touch '/var/log/myfile.dummy_name.txt'比较开罗的大象)然而,这个“解决方案”并不是很优雅。

一个更好的解决方案是处理find模式:

find /var/log/ -type f -name "myfile.*.txt"

双引号可以防止在 shell 中进行通配符(比较)。在这种情况下*由它自己处理,find因为-name支持这样的模式。

然而,上述方法可以myfile.*.txt匹配任何子目录/var/log/。如果您find支持-maxdepth,请使用它:

find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt"

如果没有,请看这个:将 POSIX 查找限制到特定深度?


您的操作系统可能已经使用它logrotate(8)来管理日志文件。

在我的 Debian 中,logrotate由于 而每天运行/etc/cron.daily/logrotate;Ubuntu 中应该类似。我可以通过/etc/logrotate.d/这种方式创建自定义配置并管理任意日志文件。考虑这种方法。

相关内容