membersound Asked: 2019-06-27 01:34:55 +0800 CST2019-06-27 01:34:55 +0800 CST 2019-06-27 01:34:55 +0800 CST 如何抑制“查找”命令中的某些错误消息? 772 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 ubuntu find 1 个回答 Voted Best Answer Kamil Maciorowski 2019-06-27T01:51:54+08:002019-06-27T01:51:54+08:00 在这种情况下,正确的做法是根本不要触发此消息。 当你在 shell 中运行它时 find /var/log/myfile.*.txt -type f /var/log/myfile.*.txt由外壳扩展;如果没有匹配项,则find获取扩展对象或文字。/var/log/myfile.*.txt后一种情况触发No such file or directory。 您可以先创建一个虚拟文件:(touch '/var/log/myfile.dummy_name.txt'比较elephant in Cairo)。这个“解决方案”虽然不是很优雅。 更好的解决方案是find处理模式: find /var/log/ -type f -name "myfile.*.txt" 双引号防止 shell 中的通配符(比较this)。在这种情况下*由find自身处理,因为-name支持此类模式。 然而,上述方法也可以myfile.*.txt在 的任何子目录中匹配/var/log/。如果您find支持-maxdepth,请使用它: find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt" 如果不是,请参阅:Limit POSIX find to specific depth? 您的操作系统可能已经用于logrotate(8)管理日志文件。 在我的 Debianlogrotate中,每天都运行,因为/etc/cron.daily/logrotate;它在 Ubuntu 中应该是类似的。我可以通过这种方式创建自定义配置/etc/logrotate.d/并管理任意日志文件。考虑这种方法。
在这种情况下,正确的做法是根本不要触发此消息。
当你在 shell 中运行它时
/var/log/myfile.*.txt
由外壳扩展;如果没有匹配项,则find
获取扩展对象或文字。/var/log/myfile.*.txt
后一种情况触发No such file or directory
。您可以先创建一个虚拟文件:(
touch '/var/log/myfile.dummy_name.txt'
比较elephant in Cairo)。这个“解决方案”虽然不是很优雅。更好的解决方案是
find
处理模式:双引号防止 shell 中的通配符(比较this)。在这种情况下
*
由find
自身处理,因为-name
支持此类模式。然而,上述方法也可以
myfile.*.txt
在 的任何子目录中匹配/var/log/
。如果您find
支持-maxdepth
,请使用它:如果不是,请参阅:Limit POSIX find to specific depth?
您的操作系统可能已经用于
logrotate(8)
管理日志文件。在我的 Debian
logrotate
中,每天都运行,因为/etc/cron.daily/logrotate
;它在 Ubuntu 中应该是类似的。我可以通过这种方式创建自定义配置/etc/logrotate.d/
并管理任意日志文件。考虑这种方法。