我想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
或-exit
NetBSD 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$