複数のプロジェクトディレクトリがありますproject-one
。で始まるすべてのディレクトリで実行したいと思います。これを行うために使用できるものはありますか?どうすればいいですか?project-two
different-project
./gradlew clean build
project-
xargs
答え1
次のマークアップを使用しているのでzsh
:
for dir (project-*/gradlew(N*:h)) (cd $dir && ./gradlew clean build)
これは探しています実行可能ファイル()名前が始まる現在の作業ディレクトリのサブディレクトリにあるファイル*
(ディレクトリへのシンボリックリンクも考慮されます)は、eadを使用してディレクトリ自体を作成し、それぞれは現在の作業ディレクトリを置くサブシェルを起動します。ディレクトリは、成功すると実行されるこのサブシェルで一時停止されます。gradlew
project-
h
for
dir
(...)
c
d
dir
./gradlew clean build
cd
そうすることはxargs
痛いでしょう。これをしたい1つの理由は、xargs
GNUプロジェクトのプロジェクトであり、複数を並列に実行したい場合ですgradlew
。
例えば。
xargs -r0 -P4 -n1 -a <(print -rNC1 project-*/gradlew(N*:h)) \
sh -c 'cd "$1" && exec ./gradlew clean build' sh
並行して実行されると、すべての人が4
sh
一致するディレクトリを取得して実行します。P
1
cd
./gradlew clean build