即使/tmp
没有文件调用something
,搜索它find
也会返回 0:
$ find /tmp -name something
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
find
找不到任何东西时,如何获得非零退出状态?
Ste*_*day 73
find /tmp -name something | grep .
Run Code Online (Sandbox Code Playgroud)
返回状态将0
是找到某物时,否则为非零。
编辑:更改egrep '.*'
为更简单的grep .
,因为结果是相同的。
Ste*_*nny 26
使用 find 退出 0 很容易,退出 >0 更难,因为这通常只会发生错误。但是我们可以让它发生:
if find -type f -exec false {} +
then
echo 'nothing found'
else
echo 'something found'
fi
Run Code Online (Sandbox Code Playgroud)
小智 23
不打印但在找到结果时退出 0 的最简单解决方案
find /tmp -name something | grep -q "."
Run Code Online (Sandbox Code Playgroud)
she*_*n89 12
刚刚发现这个问题,同时试图找到解决 Puppet 问题的方法(更改目录下文件夹的权限,但不更改目录本身的权限),这似乎有效:
test -n "$(find /tmp -name something)"
Run Code Online (Sandbox Code Playgroud)
我的具体用例是这样的:
test -n "$(find /home -mindepth 1 -maxdepth 1 -perm -711)"
Run Code Online (Sandbox Code Playgroud)
如果 find 命令没有找到具有所需权限的文件,它将退出代码 1。
这是不可能的。如果它成功退出,Find 返回 0,即使它没有找到文件(这是一个正确的结果,当文件确实不存在时不指示错误)。
引用查找联机帮助页
退出状态
如果所有文件都处理成功,则 find 以状态 0 退出,如果发生错误,则大于 0。这是故意的很宽泛的描述,但如果返回值非零,则不应依赖 find 的结果的正确性。
根据您想要实现的目标,您可以尝试让查找-print
文件名并对其输出进行测试:
#!/bin/bash
MYVAR=`find . -name "something" -print`
if [ -z "$MYVAR" ]; then
echo "Notfound"
else
echo $MYVAR
fi
Run Code Online (Sandbox Code Playgroud)