You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:52:34