我想运行一个任务,在其中指定两个命令,这两个命令将使用不同的参数以交替的方式运行。例如:
1. exec --foo $inputfile1 $inputfile.outfile1
2. exec --bar $inputfile2 $inputfile.outfile2
3. exec --foo $inputfile3 $inputfile.outfile3
4. exec --bar $inputfile4 $inputfile.outfile4
我可能可以通过指定两个并行命令或指定两个输入来逃脱,但我需要更通用的东西。将使用管道“查找”命令指定文件。
编辑:我的一项操作命令如下所示:
find . -name 'somefiles*' -print0 | parallel -0 -j10 --verbose 'exec --foo {} {.}.outfile'
我只是不知道如何在两个命令之间以交替方式执行此操作
因此,基本上我需要并行 -j10 做的是在一组文件上运行 5 个带有 foo 参数的命令和其中 5 个带有 bar 参数的命令。我可能可以摆脱它不交替的情况,但我希望并行处理它恰好是 5/5 分割,这样我就不会以更多的 foos 或更多的 bar 结束
答案1
您可以先将所有参数放在一个文件中,然后使用
parallel -a filename command
例如:
echo "--fullscreen $(find /tmp -name *MAY*.pdf) $(find /tmp -name *MAY*.pdf).out" >> /tmp/a
echo "--page-label=3 $(find /tmp -name *MAY*.pdf) $(find /tmp -name *JUNE*.pdf).out" >> /tmp/a
echo "--fullscreen $(find /tmp -name *MAY*.pdf) $(find /tmp -name *JULY*.pdf).out" >> /tmp/a
然后运行命令:
parallel -a /tmp/a evince
答案2
exec --foo $inputfile1 $inputfile.outfile1 & \
exec --bar $inputfile2 $inputfile.outfile2 & \
exec --foo $inputfile3 $inputfile.outfile3 & \
exec --bar $inputfile4 $inputfile.outfile4 &
答案3
这应该在--foo
和之间交替--bar
:
find . -name 'somefiles*' -print0 |
parallel -0 -j10 --verbose 'exec {= $_=seq() % 2 ? "--foo" : "--bar" =} {} {.}.outfile'