Não reinvente a roda. Você pode usar pigz
, uma implementação paralela de gzip
, que deve estar em seus repositórios de distribuição. Se não for, você pode obtê-lo em aqui .
Depois de instalar o pigz
, use-o como você faria com gzip
:
pigz *txt
Eu testei isso em 5 arquivos de 30M criados usando for i in {1..5}; do head -c 50M /dev/urandom > file"$i".txt; done
:
## Non-parallel gzip
$ time gzip *txt
real 0m8.853s
user 0m8.607s
sys 0m0.243s
## Shell parallelization (same idea as yours, just simplified)
$ time ( for i in *txt; do gzip $i & done; wait)
real 0m2.214s
user 0m10.230s
sys 0m0.250s
## pigz
$ time pigz *txt
real 0m1.689s
user 0m11.580s
sys 0m0.317s