使用多个进程处理文件的 Bash 脚本

使用多个进程处理文件的 Bash 脚本

通过生成多个进程来利用所有核心,可以加快大多数批处理文件 Bash 脚本的速度。我想编写一个脚本来处理一堆文件,并在进程之间平均分配要处理的文件数量。我该怎么做?

答案1

GNU并行并行启动子进程。语法与 xargs 类似。从文档

要使用 gzip 压缩所有 html 文件,请运行:

find . -name '*.html' | parallel gzip --best

答案2

我不知道这是否是最好的方法,但这就是我想出的办法。

用法:batch.sh [number of processes to use]

批处理.sh:

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
            ./helper.sh $i $1 &
        done

帮助器.sh:

n=$1
for file in ./*; do
   # Your code here v
   echo Processing file: $file
   # ^
   n=$((n+1))
   n=$((n%$2))
done

这将生成 n 个进程,每个进程处理一个文件,然后跳过 (n - 1) 个文件。进程 (i mod n) 处理第 i 个文件。

相关内容