我有一个像这样的过程,它会以随机间隔生成预定义数量的文件:
#!/bin/bash
for i in {1..10}
do
sleep $(shuf -i 20-60 -n 1)
echo $i > file_$i.txt
done
我有另一个进程,使用 GNU Parallel 独立运行在每个文件上,如下所示:
parallel wc -l ::: file_{1..10}.txt
正如预期的那样,并行在当前可用的文件上运行。有没有办法让并行等待剩余文件可用并尽快运行?
如果文件总是按照 1 到 10 的顺序创建,您可以只测试
file_10.txt
. 例如否则,您可以计算匹配文件的数量,例如
(注意:如果任何文件名包含换行符,则管道
find
将wc -l
不起作用,因为wc -l
会计算行数)我使用了 20 秒的睡眠时间,因为您的
for
循环至少睡眠 20 秒。调整睡眠时间以满足您的需要 - 如果文件创建过程需要很长时间,请增加睡眠时间。如果速度真的很快,就减少它。看看https://www.gnu.org/software/parallel/parallel_examples.html#example-gnu-parallel-as-queue-system-batch-manager
1号航站楼:
(
-u
如果您希望立即在屏幕上输出,则需要此选项。否则输出将延迟到下一个作业完成为止。在这两种情况下,作业都会立即运行)。2 号航站楼:
如果这些文件是在 my_dir 中创建的唯一文件,请查看https://www.gnu.org/software/parallel/parallel_examples.html#example-gnu-parallel-as-dir-processor
这样您就不需要该
jobqueue
文件了。