私はその投稿を読んだことがあるfind を使用するときに複数のコマンドを実行するにはどうすればよいですか?提供された回答を私が誤解していない限り、それが私が求めている解決策を提供しているとは思いません。
私の要件は、特定のファイル セットを見つけることです。見つかった場合は、ディレクトリを作成します。ディレクトリが正常に作成された場合にのみ、ファイルを抽出します。抽出したら、ソース ファイルを削除します。どうすればこれを実現できますか?
答え1
あなたが投稿したリンクは、私の意見では「正しい」答えです。シェルを生成するだけです。これを行わないと、十分な大きさのツールボックスが得られません。できた次のような疑似コードで find コマンドを構築します。
find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;
述語は自然に and で結ばれるため、エラーが発生すると停止します。ただし、ディレクトリの名前付けを十分に制御できません。失敗することが保証されています。
シェルを生成すると、シェル言語全体を理解できるようになるため、この問題は解決されます。
find /path -criteria -exec /bin/sh '
for d; do
mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
done' _ {} +
このバージョンには、ループの任意の反復でエラーが継続するという副作用があることに注意してください。つまり、全て結果。エラーが発生した場合に停止したい場合は、-e フラグを使用してシェルを起動することをお勧めします。