ディレクトリ構造で使用したいですfind
。ターゲット条件を持つファイルが1つ以上存在する場合は終了します。これにより、残りのシェルスクリプトが失敗します。
このシェルスクリプトは大規模なディレクトリ構造で実行するように設計されているので、できるだけ早く終了したいと思います。
たとえば、次のことをしたいと思います。
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シェル構成を使用し、一時ファイルの使用を避けたいと思います。
答え1
再帰は-prune
サブディレクトリでのみ停止し、見つかった最初の項目では停止しません。-quit
GNU、FreeBSD find
、または-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$