并行运行bash脚本

时间:2014-08-13 16:12:43

标签: bash shell parallel-processing

我有一个非常简单的命令,我想并行执行而不是顺序执行。

>for i in ../data/*; do ./run.sh $i done

run.sh处理来自../data目录的输入文件,我想使用shell脚本而不是Python程序或类似的东西同时执行此过程。有没有办法使用GNU Parallel

执行此操作

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

shopt -s nullglob
FILES=(../data/*)
[[ ${#FILES[@]} -gt 0 ]] && printf '%s\0' "${FILES[@]}" | parallel -0 --jobs 2 ./run.sh

答案 1 :(得分:1)

我没有使用过GNU Parallel,但您可以使用&在后​​台运行脚本。如果您想等待所有脚本完成,请稍后添加wait(可选)。

for i in ../data/*; do ./run.sh $i & done
# Below wait command is optional
wait
echo "All scripts executed"

答案 2 :(得分:1)

你可以试试这个:

find ../data -maxdepth 1 -name '[^.]*' -print0 | parallel -0 --jobs 2 ./run.sh

需要使用find命令的name参数,因为在您的示例中使用了shell globbing ../data/*,因此我们需要忽略以点开头的文件。