Linux / Comando xz: comprimir arquivos e escolher níveis e threads
O comando xz comprime arquivos no formato .xz e normalmente remove a entrada depois de uma compressão bem-sucedida. Use -k para manter o original ou -c para escrever o resultado na saída padrão; a escolha do nível de compressão e das threads (linhas de execução do programa) deve considerar a memória e o ambiente de recuperação.
Xz trata cada arquivo informado como uma entrada de compressão; ele não empacota por conta própria uma árvore de diretórios. Para guardar nomes, pastas e vários membros em um único pacote, combine a compressão com o comando tar. A extensão .tar.xz indica esse pacote tar envolvido pela camada xz.
Sintaxe e preparação
xz [opções] [arquivo...]
Essa linha representa a sintaxe, não um comando para copiar literalmente. Substitua os trechos entre colchetes pelos argumentos necessários. Confira man xz e xz --version no sistema em que trabalhará, pois opções, padrões de threads e ajustes de recursos podem variar entre versões.
Prepare uma cópia da entrada em uma pasta separada e confirme que os nomes de saída estão livres. Nos exemplos, database.sql é um arquivo já existente. Se ele vier de um banco de dados, termine primeiro uma exportação consistente com a ferramenta apropriada: comprimir um SQL não cria nem verifica essa consistência. Reserve database.sql.xz e database-copy.sql.xz como nomes novos.
Comprimir, preservar e testar
Conservar a entrada: -k cria database.sql.xz e mantém database.sql. Sem essa opção ou a saída padrão, uma compressão normal bem-sucedida remove o arquivo de entrada.
xz -k database.sql
Escolher outro nome: -c escreve os dados comprimidos na saída padrão e implica a preservação da entrada. O operador > faz o shell gravar esse fluxo em database-copy.sql.xz.
xz -c database.sql > database-copy.sql.xz
Confira o redirecionamento separadamente. O shell pode esvaziar uma saída existente antes de xz abrir a entrada; se o arquivo de origem estiver ausente ou a compressão falhar, a saída pode ficar vazia ou incompleta. Use um nome novo e diferente da entrada, e confira o diagnóstico e o código de saída.
Testar o arquivo comprimido: -t percorre os dados para verificar sua integridade, descartando a saída descomprimida. Esse modo não cria nem remove arquivos.
xz -t database.sql.xz
Um teste bem-sucedido normalmente não imprime nada. No xz, zero indica sucesso, um indica erro e dois indica uma condição de aviso sem erro efetivo. Confira o código imediatamente após o comando e leia o diagnóstico; o sucesso de uma listagem posterior não confirma que a compressão ou o teste anterior funcionou.
Conferir uma recuperação de teste
Em uma pasta de teste, confirme que note.txt e note.txt.xz não existem. Prepare a entrada com printf 'hello\n' > note.txt: ela terá seis bytes, a palavra hello seguida de uma quebra de linha. Execute então:
xz -k note.txt
xz -t note.txt.xz
ls note.txt*
Os nomes esperados são os seguintes. As duas colunas são apenas uma apresentação ilustrativa; uma listagem capturada ou outro terminal pode mostrar um nome por linha.
note.txt note.txt.xz
A entrada foi mantida por -k, mas a presença dos dois nomes não é uma comparação de conteúdo. Para restaurar sem substituir o original, escolha outro nome livre e use xz -dc note.txt.xz > restored-note.txt. Compare os arquivos, por exemplo com cmp note.txt restored-note.txt: uma comparação de arquivos iguais normalmente termina sem texto e retorna zero.
- Confirme a entrada e nomes de saída livres; obtenha uma cópia consistente se os dados estiverem sendo alterados.
- Comprima com
-kou-cpara preservar a entrada e confira o término da operação. - Execute
xz -tcom o nome completo do arquivo comprimido e verifique o diagnóstico e o código de saída. - Recupere uma cópia para outro destino e compare seus bytes com a referência. Para um backup importante, verifique também a restauração da aplicação e mantenha uma cópia independente.
As verificações de integridade do fluxo ajudam a detectar danos, mas não autenticam quem forneceu o arquivo nem substituem uma referência confiável do conteúdo esperado. A extensão .xz também não fornece criptografia: quem consegue descomprimir o arquivo pode ler seus dados.
Níveis de compressão e threads
| Opção | Finalidade e condição |
|---|---|
-k |
Conserva os arquivos de entrada processados. |
-c |
Escreve na saída padrão e implica -k. Confira o destino do redirecionamento. |
-t |
Testa o fluxo comprimido sem criar um arquivo descomprimido. |
-0 ... -9 |
Escolhe um conjunto de parâmetros de compressão. O padrão descrito pelo manual é -6; valores altos podem exigir mais recursos. |
-T 2 |
Solicita até duas threads de trabalho. -T 0 seleciona automaticamente a quantidade; o tamanho da entrada e os limites de memória podem reduzir o uso efetivo. |
Um nível alto não é automaticamente a melhor escolha. A configuração de compressão determina também a memória necessária para descomprimir, principalmente pelo tamanho do dicionário, uma área de memória usada para reconstruir os dados. Considere a máquina que receberá o arquivo, além da máquina que o cria. Compare o tamanho final e os recursos consumidos mantendo a mesma entrada, sem pressupor uma proporção fixa de redução.
A opção -e, usada em combinações como -9e, escolhe uma variante mais lenta do nível selecionado em busca de melhor compressão, sem garantir um resultado menor. Ela não deve ser confundida com um aumento obrigatório da memória de descompressão: essa memória continua relacionada à configuração e ao dicionário do nível usado. Consulte as exigências no manual antes de escolher um valor alto.
Para experimentar um limite explícito de threads sem substituir os resultados anteriores, use um nome novo, por exemplo xz -T2 -c database.sql > database-t2.sql.xz. Isso não garante que duas threads trabalharão ao mesmo tempo em uma entrada pequena. O modo de uma thread e o modo de várias threads também podem produzir fluxos comprimidos diferentes que recuperam os mesmos dados; compare o conteúdo restaurado, não apenas os bytes dos arquivos .xz.
Sobrescrita, recursos e pacotes tar
Se o arquivo de saída já existir, xz normalmente informa o erro e ignora aquela entrada. Não conte com uma pergunta de confirmação. Confira o nome e preserve a saída anterior ou escolha outro destino; usar -f para forçar a substituição pode destruir dados. O comportamento de recusa do próprio xz não impede que > já tenha truncado uma saída aberta pelo shell.
Um arquivo muito pequeno pode ficar maior devido à estrutura adicional do formato. Níveis altos e várias threads podem elevar as exigências de memória; se houver erro de limite, reduza os recursos solicitados de acordo com o manual em vez de repetir a operação sem analisar o diagnóstico. Nenhuma configuração de compressão torna desnecessária a conferência da recuperação.
Para empacotar uma pasta, confira um nome de saída livre e use, por exemplo, tar -cJf project.tar.xz project/. A letra J é maiúscula e seleciona xz no GNU tar. Confira os membros com tar -tJf project.tar.xz; para restaurar um pacote confiável em um destino novo, execute mkdir restore e depois tar -xJf project.tar.xz -C restore. A listagem ajuda a planejar a extração, mas não torna um pacote desconhecido confiável.
Na verificação de 29 de outubro de 2026 com xz e liblzma 5.8.3, Bash 5.3.9 e tar 1.35 do Git for Windows, os exemplos com -k, -c e -t funcionaram com arquivos controlados. As saídas de um SQL fictício recuperaram os bytes exatos; o SQL não foi executado nem veio de um banco real. A entrada note.txt tinha seis bytes e sua saída comprimida tinha 72 bytes nesse ambiente; a recuperação para outro nome e a comparação também foram bem-sucedidas.
Em verificações adicionais, a compressão padrão removeu a entrada de teste, uma colisão sem força preservou os arquivos e uma cópia com o rodapé alterado foi rejeitada por -t com código um. Uma entrada ausente com redirecionamento deixou vazia uma saída descartável. Os modos -T1, -T2 e -T0 e o nível -0 recuperaram os mesmos dados; isso não mede a quantidade efetiva de threads, o desempenho ou a memória. A criação, listagem e extração de um pacote tar.xz também preservaram os bytes do membro de teste. Não foram verificadas permissões nativas do Linux nem todos os metadados.
Pergunta frequente
Qual é a diferença entre .xz e .tar.xz?
.xz é o fluxo de dados comprimidos; .tar.xz normalmente contém um pacote tar comprimido com xz, que pode guardar vários arquivos e diretórios. Descomprimir só a camada xz deixa um .tar; para recuperar os membros, use a extração de tar ou trabalhe diretamente com o pacote comprimido usando a opção -J, como no exemplo anterior.
Documentação oficial
O manual oficial do xz descreve os modos de operação, os níveis, as threads, a memória e os códigos de saída. Confira também a documentação da versão instalada para escolher parâmetros compatíveis com seu ambiente de recuperação.




