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
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?
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
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.
Tags bash multiple-instances