当未找到匹配的文件时,我可以让“find”返回非 0 吗?

当未找到匹配的文件时,我可以让“find”返回非 0 吗?

即使/tmp没有名为 的文件something,使用 进行搜索find也会返回 0:

  $ find /tmp -name something 
  $ echo $?
  0

find当没有找到任何东西时,如何获得非零退出状态?

答案1

find /tmp -name something | grep .

当发现某些东西时将返回状态0,否则将返回非零状态。

编辑:从 改为egrep '.*'更简单grep .,因为结果是一样的。

答案2

使用 find 时 exit 0 很容易,exit >0 比较难,因为这通常只发生在错误的情况下。但是我们可以让它发生:

if find -type f -exec false {} +
then
  echo 'nothing found'
else
  echo 'something found'
fi

答案3

最简单的解决方案,不打印,但在找到结果时退出 0

find /tmp -name something | grep -q "."

答案4

这是不可能的。如果成功退出,Find 将返回 0,即使它没有找到文件(这是正确的结果不是当文件确实不存在时表示错误)。

引用 find 手册页

退出状态

如果所有文件都成功处理,find 将以状态 0 退出;如果出现错误,则返回值大于 0。这是故意给出的非常宽泛的描述,但如果返回值非零,则不应依赖 find 结果的正确性。

根据您想要实现的目标,您可以尝试找到-print文件名并根据其输出进行测试:

#!/bin/bash
MYVAR=`find . -name "something" -print`
if [ -z "$MYVAR" ]; then
    echo "Notfound"
else
   echo $MYVAR
fi

相关内容