find + get $? 当 find 与单词不匹配时输出 diff 然后输出 0

find + get $? 当 find 与单词不匹配时输出 diff 然后输出 0

当我表演时

  find /tmp  -name something 

find 命令未在 /tmp 下找到某些单词

  echo $?

  I get $?=0

没关系

但是当 find 命令找不到某个单词时,如何启用退出状态差异然后 0?

答案1

find如果运行成功则返回 0,如果出现错误则返回非零值。它不会根据是否发现任何内容来设置退出代码。您需要执行如下操作:

files=$(find /tmp  -name something)
if [[ -n "$files" ]]
then
    echo "files were found"
fi

然而,你更可能想要对文件名做一些事情。你可以在循环中处理它们:

find /tmp  -name something | while read -r filename
do
    echo "found: $filename
done

或者

while read -r filename
do
    echo "found: $filename
done < <(find /tmp  -name something)

如果未找到任何内容则循环将退出而不执行任何操作。

答案2

我感觉这个是最简洁直接的方法:

test "`find /tmp/ -name something -print -quit 2>/dev/null`"

相关内容