如何使用gnu_parallel到运行多个可执行的and/orbash脚本?

How to use gnu_parallel to run multiple executable and/or bash scripts?

我最近一直在尝试以一种比打开多个终端实例并分别在脚本中执行更方便的方式运行并行执行我的脚本。

这两天我一直在努力学习如何使用gnu_parallel,但我仍然有点不知所措,希望有人能提供一个直接的例子。

假设我有一个名为 blah.exe 的 g++ 编译代码和一个名为 blah.sh 的 bash 脚本,单独 运行 就可以了,但我想在不同的目录。

我一直在读书 https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Working-as-xargs--n1.-Argument-appending

https://www.biostars.org/p/182136/

但我对语法不是很清楚

对于运行这些系列,我会做:

for i in 1 2 3 4
mv ./blah.exe directory$i
cd directory$i
./blah.exe all
cd ..
end

同样

for i in 1 2 3 4
mv ./blah.sh directory$i
cd directory$i
source ./blah.sh all
cd ..
end

我想了解如何使用并行在一个命令中将此负载拆分为 4 个逻辑线程。

有人可以为此提供示例吗?

感谢您的宝贵时间。

类似于:

parallel --dry-run 'cd directory{}; ../blah.exe all; source ../blah.sh all' ::: {1..4}

无需 copy/move 可执行文件,只需 运行 相同的即可。

之后不需要 cd ..,因为每次都是一个新过程。

注意这不是多线程,是多处理。


如果要处理不连续的个目录号,可以使用:

parallel ... ::: {1..4} 6 7 {11..14}

如果要处理所有个目录,可以使用:

printf "%s[=12=]" */ | parallel -0 'cd {}; pwd' 

如果要处理所有以FRED开头的目录,可以使用:

printf "%s[=13=]" FRED*/ | parallel -0 'cd {}; pwd'