同时运行子目录中的命令

同时运行子目录中的命令

我知道如何在与这样的模式匹配的所有子目录中运行命令(假设我想运行gh repo sync):

for d in ./*/ ; do (cd "$d" && gh repo sync) ; done

并在每个目录的子 shell 中运行命令连续地

我想要的是并行运行所有命令,但在主脚本中等待它们全部完成。

我使用的是 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

在后台运行每个子 shell 命令,然后等待它们全部完成

for d in ./*/
do
    ( cd "$d" && gh repo sync ) &
done
wait

相关内容