Como faço para descompactar um tarball que usa .xz?

623

Estou acostumado a extrair tarballs com um -xfz flag, que lida com arquivos gzip e bzip2.

Recentemente, encontrei um arquivo .tar.xz e gostaria de descompactá-lo em uma etapa usando tar , como posso fazer isso?

    
por Jorge Castro 03.01.2012 / 00:41

10 respostas

810

O Ubuntu inclui o GNU tar, que reconhece o formato por si só! Um comando funciona com qualquer método de compactação suportado, conforme o manual .

tar xf archive.tar.xz
tar xf archive.tar.gz
tar xf archive.tar

Se o tar der um erro Cannot exec , talvez seja necessário sudo apt install xz-utils primeiro.

    
por ramslök 26.02.2012 / 18:41
275

Tente

tar -xJf file.pkg.tar.xz

O -J é o sinalizador que lida especificamente com arquivos .xz.

    
por jrg 03.01.2012 / 00:42
67

Se, por algum motivo, as soluções tar não funcionarem (talvez porque você esteja usando os recursos internos do OS X), tente o seguinte:

unxz < file.tar.xz > file.tar

… o que equivale a:

xz -dc < file.tar.xz > file.tar

Em seguida, use tar para descompactar o arquivo.

    
por Mathias Bynens 19.01.2014 / 21:05
22

xz é um compressor de dados sem perdas. Você terá que extrair a bola alcalina de xz e depois extrair o tar:

unxz my_archive.tar.xz      # results in my_archive.tar

Então você sabe extrair um tar

tar -xf my_archive.tar

Fonte: XZ Utils - Wikipedia .

    
por Foxx 23.05.2014 / 20:44
11

Eu tive o mesmo problema, o comando tar xf não conseguiu extraí-lo. Para corrigir isso, você precisa instalar o pacote xz-utils . A solução foi:

sudo apt-get install xz-utils

então:

tar xf myfile.tar.xz
    
por Zsolt Sky 14.02.2015 / 19:44
7

E sobre

tar -xvf package.tar.xz

-x - extrair arquivos

-v - lista de verbosidade dos arquivos processados

-f - use o arquivo de arquivamento especificado

    
por nsane 05.03.2014 / 18:16
3

Se o tar reconhecer o formato de compactação, você não precisará de um sinalizador:

tar xvf *.tar.xz

Se você precisar descompactar a entrada manualmente, por exemplo, porque seu tar é muito antigo para reconhecer xz, ou você precisa de um caminho especial:

xz -cd *.tar.xz | tar xvf -

Os pipes são mais rápidos do que criar um arquivo intermediário descompactado e usar menos espaço em disco também!

    
por Orion Lawlor 04.02.2015 / 07:13
3

Só quero adicionar isso se você tiver uma versão antiga do tar GNU antes da versão 1.22 quando o - As opções xz e -J ficaram disponíveis, você pode compactar ou descompactar arquivos tar.xz usando --use-compress-program xz . Por exemplo,

tar --use-compress-program xz -cf example.tar.xz file1 file2 file3

ou

tar --use-compress-program xz -xf example.tar.xz
    
por ScottH 04.09.2015 / 03:21
2

Uau, isso é realmente bom. Foi feito com 7zip em um Mac? Tente isto:

7z x -so file.tar.xz | tar xf -
    
por user8290 03.01.2012 / 01:06
0

O Ubuntu vem com Python (Python 2.7 e Python 3), que contém os módulos necessários para extrair arquivos. Então, se por alguma razão o comando tar estiver faltando (digamos que seu administrador de sistema o tenha removido e você não tenha sudo privillege para instalá-lo), pode-se usar:

python3 -c 'import tarfile,sys; b = tarfile.open(sys.argv[1]);print(b.extractall())' ./archive.xz 

Como um script curto, é mais legível como:

#!/usr/bin/env python3
import tarfile,sys

with tarfile.open( sys.argv[1] ) as fd:
    fd.extractall()

Suponha que eu criei um arquivo .xz com tar cJf thing.xz /etc/passwd . O arquivo conterá o diretório etc com o arquivo passwd dentro. O uso do script acima resultará no diretório etc criado em seu diretório de trabalho atual e dentro dele será passwd file. Claro, isso sempre pode ser estendido especificando o caminho onde você deseja extrair dentro da função extractall() .

    
por Sergiy Kolodyazhnyy 08.06.2018 / 10:36