使用find命令-mmin参数未找到文件时仍返回退出码0的问题
问题解决:让find在未匹配到文件时返回非0退出码
核心原因
find命令的退出码设计逻辑是:仅当命令执行出现错误(如指定路径不存在、权限不足)时才返回非0值;只要命令执行成功,无论是否找到匹配的文件,都会返回0。这就是你原命令中即使没有符合条件的文件,echo $?仍输出0的原因。
无需外部管道的内置实现方式
find本身没有直接参数让它在无匹配时返回1,但可以结合shell逻辑或find的内置动作实现需求,无需依赖grep等外部工具:
方法1:命令替换+shell条件判断(推荐)
利用-print -quit快速终止搜索(找到第一个匹配文件就停止,提升效率),通过命令替换判断输出是否为空:
[ -n "$(find /tmp/healthy -mmin -1 -print -quit)" ] echo $?
- 当存在符合条件的文件时,命令替换得到非空字符串,
[ -n ... ]返回0; - 当无符合条件的文件时,命令替换结果为空,
[ -n ... ]返回1。
方法2:-exec配合逻辑取反
通过-exec执行指定命令,结合!取反退出码:
! find /tmp/healthy -mmin -1 -exec false {} + echo $?
- 找到文件时:
-exec false {} +执行失败(返回1),!取反后整体返回0; - 未找到文件时:
-exec不执行,find返回0,!取反后整体返回1。
注意:此方法无法区分“未找到文件”和“find命令执行出错”两种情况,前者更可靠。
你的临时解决方案说明
你用find /tmp/healthy -mmin -1 | grep .的方式是可行的:
- 当
find有输出时,grep .匹配到文件名行,返回0; - 当
find无输出时,grep因无匹配内容返回1,符合你的预期。
内容的提问来源于stack exchange,提问作者silent
相关产品推荐
相关产品推荐

