我有一个非常简单的命令,我想并行执行而不是顺序执行。
>for i in ../data/*; do ./run.sh $i done
run.sh处理来自../data目录的输入文件,我想使用shell脚本而不是Python程序或类似的东西同时执行此过程。有没有办法使用GNU Parallel?
执行此操作答案 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/*
,因此我们需要忽略以点开头的文件。