find を使用した一連のコマンドの実行

find を使用した一連のコマンドの実行

ディレクトリを確認し、一致する各フォルダに対してコマンドを実行したいと思います。以下は、find私が探しているリストを正しく返します。

find . -maxdepth 1 -name "*.bitbucket"

返された各項目に対して、次のコマンドを実行したいと思います。

hg pull --update --repository [FIND_RESULT_HERE]

findとxargsを使ってこれを行う簡単な方法はありますか?そうでなければ、最良の選択は何ですか?

答え1

この-execオプションをfind次のように使用します。

find . -maxdepth 1 -name "*.bitbucket" -exec hg pull --update --repository {} \;

gets は{}find の結果に置き換えられ、\;ターミネータは一度に 1 つずつ実行する必要があることを示します。 Aは、+いくつかが引数で一緒に束ねられます。

答え2

find . -maxdepth 1 -name "*.bitbucket" -execdir hg pull --update --repository {} +

複数のファイルが並列に処理されます。すべての find に -execdir があるわけではありません。 Gnu / findでは、エラーを避けるためにこの使用をお勧めします。

答え3

@Calebの答えは素晴らしいです。または、これを行うために使用できますxargs

各検索結果に対してhg操作を実行するには(@Calebが指摘したように)

find . -depth 1 -name "*.bitbucket" | xargs -n1 hg pull --update --repository

すべての検索結果を1つのコマンドに蓄積するには、を削除します-n1

また注意してください-depth。このオプションはパラメータを使用しません。私の考えでは-maxdepth

関連情報