Abordagem comum
Há opção para o tar
programa:
-I, --use-compress-program PROG
filter through PROG (must accept -d)
Você pode usar a versão multithread do arquivador ou utilitário do compressor.
Os arquivadores multithread mais populares são pigz (em vez de gzip) e pbzip2 (em vez de bzip2). Por exemplo:
$ tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 paths_to_archive
$ tar --use-compress-program=pigz -cf OUTPUT_FILE.tar.gz paths_to_archive
O arquivador deve aceitar -d. Se o seu utilitário de substituição não tiver esse parâmetro e / ou você precisar especificar parâmetros adicionais, use pipes (adicione parâmetros, se necessário):
$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.tar.gz
$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.tar.gz
A entrada e a saída de singlethread e multithread são compatíveis. Você pode compactar usando a versão multithread e descompactar usando a versão singlelethread e vice-versa.
p7zip
Para o p7zip para compactação, você precisa de um pequeno script de shell como o seguinte:
#!/bin/sh
case $1 in
-d) 7za -txz -si -so e;;
*) 7za -txz -si -so a .;;
esac 2>/dev/null
Salve-o como 7zhelper.sh. Aqui está o exemplo de uso:
$ tar -I 7zhelper.sh -cf OUTPUT_FILE.tar.7z paths_to_archive
$ tar -I 7zhelper.sh -xf OUTPUT_FILE.tar.7z
xz
Em relação ao suporte XZ multithread. Se você estiver executando a versão 5.2.0 ou superior do XZ Utils, poderá utilizar vários núcleos para compactação, definindo -T
ou --threads
com um valor apropriado por meio da variável de ambiente XZ_DEFAULTS (por exemplo XZ_DEFAULTS="-T 0"
).
Este é um fragmento do man para a versão 5.1.0alpha:
A compactação e descompactação multithread ainda não foram implementadas, portanto, esta opção não tem efeito no momento.
No entanto, isso não funcionará para descompactação de arquivos que também não foram compactados com o encadeamento ativado. Do man para a versão 5.2.2:
A descompressão por encadeamento ainda não foi implementada. Ele funcionará apenas em arquivos que contêm vários blocos com informações de tamanho nos cabeçalhos dos blocos. Todos os arquivos compactados no modo multithread atendem a essa condição, mas os arquivos compactados no modo single threaded nem se --block-size = size for usado.
Recompilar com substituição
Se você criar tar a partir de fontes, poderá recompilar com parâmetros
--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip
Após recompilar o tar com essas opções, você pode verificar a saída da ajuda do tar:
$ tar --help | grep "lbzip2\|plzip\|pigz"
-j, --bzip2 filter the archive through lbzip2
--lzip filter the archive through plzip
-z, --gzip, --gunzip, --ungzip filter the archive through pigz