最初に見つかった場合、戻りコードで終了

最初に見つかった場合、戻りコードで終了

ディレクトリ構造で使用したいです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サブディレクトリでのみ停止し、見つかった最初の項目では停止しません。-quitGNU、FreeBSD find、または-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$

関連情報