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.*.txt
No 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/
这种方式创建自定义配置并管理任意日志文件。考虑这种方法。