即使/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