在bash for循环中并行运行有限数量的命令



我想在大约10K个文件上运行命令。如果我可以同时处理10个这样的文件名,速度会更快。文件名是散列值,因此没有明确的模式可用于遍历它们。下面是依次遍历文件的顺序for循环:

顺序for循环:

src_dir='/path/to/src'
dest_dir='/path/to/dest'
for f in $src_dir/*.mp4 ; do echo $dest_dir/new_$(basename ${f}); done;

同时开始所有命令的并行for循环

src_dir='/path/to/src'
dest_dir='/path/to/dest'
for f in $src_dir/*.mp4 ; do echo $dest_dir/new_$(basename ${f}) & done;

是否有一种直接的方法来限制在for循环中同时启动的并行作业的数量?

注意:我理解parallel --link -j{num} {command}:::x y z实际上允许您同时开始指定{num}命令,但我不确定如何轻松指定x y z参数,因为我的文件名是哈希值。

试一下:

a=1  # counter
n=10 # desired number of simultaneous processes
for i in {1..100}; {
((a%n==0)) && wait
((a++))
sleep 5 &
}

最新更新