ディレクトリを確認し、一致する各フォルダに対してコマンドを実行したいと思います。以下は、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
。