并行运行目录中的每个第10个文件

时间:2015-11-15 22:54:00

标签: bash awk command-line grep command-line-arguments

我在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

我试过的链接:

Grabbing every 4th file

How to process every second file in bash?

1 个答案:

答案 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命令的语法。