Script Bash para processar arquivos usando vários processos

1

A maioria dos processamentos de arquivos em lote Os scripts Bash podem ser acelerados gerando vários processos para utilizar todos os núcleos. Eu quero fazer um script que irá processar um monte de arquivos, dividindo o número de arquivos para processar igualmente entre os processos. Como faço isso?

    
por sudo 26.06.2015 / 04:56

2 respostas

4

Veja o paralelo GNU para lançar sub-processos em paralelo. Tem sintaxe semelhante a xargs. De os documentos :

To compress all html files using gzip run:

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

    
por 26.06.2015 / 14:25
1

Eu não sei se essa é a melhor maneira de fazer isso, mas aqui está o que eu criei.

Uso: batch.sh [number of processes to use]

batch.sh:

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

helper.sh:

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

Isso gera n processos que processam um arquivo e pula (n - 1) arquivos. Process (i mod n) processa o arquivo ith.

    
por 26.06.2015 / 04:56