![同时运行子目录中的命令](https://linux22.com/image/219478/%E5%90%8C%E6%97%B6%E8%BF%90%E8%A1%8C%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%91%BD%E4%BB%A4.png)
我知道如何在与这样的模式匹配的所有子目录中运行命令(假设我想运行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