我在bash中有以下命令,它接收目录中的输入图像,并执行可执行文件“execute”,并在文本文件$ file中的“results”和一些文本注释中输出一些图像结果。问题是我需要并行运行每10个文件。似乎可以编写一个shell脚本来每10个进行一次处理。但是,我无法让并行部分工作。如何将(输入图像的)文件名作为输入参数传递给-r,并且仍然并行运行?我尝试了很多东西。
for file in *.jpg; do ../../execute --model ../../modelsXX.txt -r $file.txt
--video ../results --threshold=0 $file; done
我试过的链接:
答案 0 :(得分:1)
这计算文件的数量,每当模数10为7的文件数时(只是为了比选择1更有趣,但你可以使用任何值0..9)在后台运行你的命令,这允许命令并行运行。
n=0
for file in *.jpg
do
if [ $((++n % 10)) = 7 ]
then ../../execute --model ../../modelsXX.txt -r $file.txt --video ../results --threshold=0 $file &
fi
done
wait # Wait for the jobs running in parallel to finish
我真正坚持的是并行部分。我需要与一个命令并行运行它。
在这种情况下,只需回显循环中的每个第十个名称,并将循环的输出传递给parallel
命令:
n=0
for file in *.jpg
do
if [ $((++n % 10)) = 7 ]
then echo $file
fi
done |
parallel -j 4 ./../execute --model ../../modelsXX.txt -r --images results/ --threshold=0
从您的笔记中未经测试和复制parallel
命令的语法。