bash:find -execエラー処理

bash:find -execエラー処理

私は間違った画像を見つけるためにこの小さなスクリプトを使用しています。

find -name '*.jpg' -exec identify -format "%f\n" {} \; 2>errors.txt

うまくいきますが、今少し修正する必要があります。 stderrをerror.txtにダンプするのではなく、エラーが発生したイメージのファイル名(%f)をダンプしたいと思います。つまり、エラーメッセージのリストではなく、error.txtに誤った形式のイメージファイルのリストが必要です。

-execセクションに|| echo "%f" >>Errors.txt を追加しようとしましたが、動作しませんでした。最良のアプローチは何ですか?

ベストアンサー1

間違った形式の画像を見つけて、その名前を次の場所に保存しますnames.txt

find -name '*.jpg' -exec bash -c 'identify "$1" &>/dev/null || echo "$1">>names.txt' none {} \;

どのように動作しますか?

  • find -name '*.jpg'

    いつものように始まりますfind

  • -exec bash -c 'identify "$1" &>/dev/null || echo "$1" >>names.txt' none {} \;

    これはidentify各ファイルで実行され、identifyゼロ以外のエラーコードが返されたときにファイル名をnames.txt

    bash -c '...' none {}bashシェルにコマンドを引用符で囲み、{}位置引数にファイル名を割り当てます$1

    好奇心に文字none列が割り当てられています$0$0未使用〜しない限りこの場合、bashはエラーを生成しますエラーメッセージにプログラム名で表示されます。

議論する

|| echo "%f" >> errors.txt-exec部分に追加しようとしましたが、動作しません。最良のアプローチは何ですか?

||微妙な点は、命令に従って行動しなければならないということですidentify。これを行うには、上記の方法をidentify使用してシェルに入れる必要があります。bash -c

おすすめ記事