私は、次のパターンに一致するすべてのサブディレクトリでコマンドを実行する方法を知っています(実行したいとしますgh repo sync
)。
for d in ./*/ ; do (cd "$d" && gh repo sync) ; done
各ディレクトリのサブシェルからコマンドを実行します。続けて。
私が望むのは、すべてのコマンドを並列に実行しますが、すべてが完了するまでデフォルトのスクリプトで待つことです。
Ubuntu 22.04を使用しています。それは可能ですか?
答え1
GNU Parallelはこれを非常によく行います。使ってきたこの構造長期毎日:
parallel --wd '{}' 'gh repo sync' ::: ./*/.git/..
私のシステムで同様のテストを行いました。
$ parallel --wd '{}' 'pwd' ::: ~/my\ projects/*/.git/..
/home/username/my projects/acard
/home/username/my projects/acp01
[125 more]
答え2
バックグラウンドで各サブシェルコマンドを実行し、すべてが完了するまで待ちます。
for d in ./*/
do
( cd "$d" && gh repo sync ) &
done
wait