与えられたプレフィックスで始まるすべてのサブディレクトリで "gradlew clean build"を実行するには?

与えられたプレフィックスで始まるすべてのサブディレクトリで "gradlew clean build"を実行するには?

複数のプロジェクトディレクトリがありますproject-one。で始まるすべてのディレクトリで実行したいと思います。これを行うために使用できるものはありますか?どうすればいいですか?project-twodifferent-project./gradlew clean buildproject-xargs

答え1

次のマークアップを使用しているのでzsh

for dir (project-*/gradlew(N*:h)) (cd $dir && ./gradlew clean build)

これは探しています実行可能ファイル()名前が始まる現在の作業ディレクトリのサブディレクトリにあるファイル*(ディレクトリへのシンボリックリンクも考慮されます)は、eadを使用してディレクトリ自体を作成し、それぞれは現在の作業ディレクトリを置くサブシェルを起動します。ディレクトリは、成功すると実行されるこのサブシェルで一時停止されます。gradlewproject-hfordir(...)cddir./gradlew clean buildcd

そうすることはxargs痛いでしょう。これをしたい1つの理由は、xargsGNUプロジェクトのプロジェクトであり、複数を並列に実行したい場合ですgradlew

例えば。

xargs -r0 -P4 -n1 -a <(print -rNC1 project-*/gradlew(N*:h)) \
  sh -c 'cd "$1" && exec ./gradlew clean build' sh

並行して実行されると、すべての人が4 sh一致するディレクトリを取得して実行します。P1cd./gradlew clean build

関連情報