第一次找到时退出并返回代码

第一次找到时退出并返回代码

我想find在目录结构上使用,如果至少存在一个具有目标条件的文件,则退出,因为这将导致 shell 脚本的其余部分失败。

由于此 shell 脚本旨在在大目录结构上运行,因此我想尽快退出它。

例如我想做:

find . -name "test" -prune
# if "test" file found, just exit immediately
if [ $? -eq 0 ] ; then
    echo error... >&2
    exit 2
fi
...continuation of shell script

-prune始终被评估为 true。

编写find表达式来实现这种短路的更有效方法是什么find

我想尽可能使用标准的 Bourne shell 构造并避免使用任何临时文件。

答案1

请注意,-prune只是停止递归到子目录;它不会停在第一个找到的条目处。您可能想要-quit使用 GNU 或 FreeBSDfind-exitNetBSD find

$ find . -name test 
./test
./Y/test

$ find . -name test -print -quit
./test

find您可以测试输出,而不是测试 的返回码

files=$(find . -name "test" -print -quit)

if [ -n "$files" ]
then
  echo "error... found $files" >&2
  exit 2
fi

答案2

find . -name "test" |grep -m1 /test$

相关内容