如何使用gnu_parallel运行多个可执行文件和/或bash脚本?

时间:2019-04-29 14:31:25

标签: c++ linux bash parallel-processing gnu-parallel

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

在过去的几天中,我一直在尝试学习如何使用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个逻辑线程。

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

谢谢您的时间。

1 个答案:

答案 0 :(得分:2)

类似的东西:

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

无需复制/移动可执行文件,只需运行相同的文件即可。

此后无需cd ..,因为这每次都是新过程。

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


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

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

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

printf "%s\0" */ | parallel -0 'cd {}; pwd' 

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

printf "%s\0" FRED*/ | parallel -0 'cd {}; pwd'