¿Cómo descomprimo un tarball que usa .xz?

775

Estoy acostumbrado a extraer tarballs con una -xfzbandera, que maneja los archivos gzip y bzip2.

Recientemente me he encontrado con un .tar.xzarchivo y me gustaría descomprimirlo en un solo paso tar, ¿cómo puedo hacer eso?

Jorge Castro
fuente
10
tenga en cuenta que puede que tenga que instalar xz-utilssi aún no está presente
Tobias Kienzler
Aquí está mi pequeño script que adivina las banderas de alquitrán para usted: gist.github.com/shime/5908634
shime
2
tar --helpenumera tarbanderas. -xzfse aplica a gzip. -xjfa bz2. -xJfa xz.
noobninja

Respuestas:

1016

Ubuntu incluye GNU tar, que reconoce el formato por sí mismo. Un comando funciona con cualquier método de compresión compatible, según el manual .

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

etc. Si tar da un Cannot execerror, es posible que sudo apt install xz-utilsprimero deba hacerlo .

ramslök
fuente
41
Es una característica de GNU tar. No sé acerca de las implementaciones de la competencia, pero el tar de GNU debería ser el más relevante para ubuntu. gnu.org/software/tar/manual/tar.html#SEC131
ramslök
42
si se encuentra tar: xz: Cannot exec: No such file or directory, instale xz-utils:sudo apt-get install xz-utils
Collin Anderson
10
Esta no es una respuesta, es una respuesta de "no te importa la respuesta, aunque la hayas preguntado". Ahorre un pensamiento para las personas que no están en 'último'
Sean Houlihane
66
¿Qué versión de tarya no requiere la bandera específica?
Mark Tomlin
8
@SeanHoulihane, no es una respuesta porque el OP solicitó un problema menor de XY . ramslök dio el OP mejor de lo que se solicitó, y eso incluyó un eficaz "No te importa la respuesta, a pesar de que preguntaste", lo cual era apropiado porque era cierto.
Christos Hayward
331

Tratar

tar -xJf file.pkg.tar.xz

La -Jes la bandera que trata específicamente con archivos .xz.

jrg
fuente
59
Me pregunto cuántas banderas tendremos en 2020. Como ... ¿45 compresiones diferentes? Conocer los interruptores de tar ya es un cinturón negro en Linux-fu. : /
Shiki
22
@Shiki: Probablemente por eso ya no te hace especificar el indicador de formato de compresión. (Ver la respuesta de ramslök.)
Nate CK
27
xkcd.com/1168
Wordzilla
66
Esta debería ser totalmente la respuesta aceptada, ya que responde la pregunta para cualquier versión de soporte de tar.xz
pospi
8
En el año 2030 las banderas se convierten en Turing completo ... 2040 se vuelven sensibles
usuario1359
80

Si por alguna razón las tarsoluciones no funcionan (tal vez porque está utilizando las funciones integradas de OS X), intente esto:

unxz < file.tar.xz > file.tar

... que es equivalente a:

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

Luego use tarpara descomprimir el archivo.

Mathias Bynens
fuente
2
Eso debería ser construible con una tubería.
gerrit
66
Siento que podrías hacer algo unxz < file.tar.xz | tar xsimilar.
treinta
77
esto funcionó para mí, donde tar xfno lo hizo. ubuntu 12.04
philshem
Al menos en mi máquina Ubuntu, unxzno es equivalente a xz -dc, sino a xz -d. Así que para extraer file.tar.xza file.tar, usted escribe simplemente unxz file.tar.xz. Si desea un equivalente a xz -dc, descomprimir a stdout, use xzcat. Por ejemplo xzcat file.tar.xz | tar x.
nwellnhof
30

xz es un compresor de datos sin pérdidas. Tendrás que extraer la bola de alquitrán de xz y luego extraer el alquitrán:

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

Entonces sabes extraer un alquitrán

tar -xf my_archive.tar

Fuente: XZ Utils - Wikipedia .

Foxx
fuente
1
La mejor respuesta. xzno necesita redirección stdout. Aún mejor:unxz -k
Mark Jeronimus
@ MarkJeronimus No me parece tan bueno ya que crea un archivo intermedio. Usar GNU alquitrán o una tubería debería exigir menos recursos.
Melebius
15

Tuve el mismo problema, el tar xfcomando no pudo extraerlo. Para solucionar esto, debe instalar el xz-utilspaquete. La solución fue:

sudo apt-get install xz-utils

entonces:

tar xf myfile.tar.xz
Zsolt Sky
fuente
14
tar -xvf package.tar.xz

-x - extraer archivos

-v - lista de archivos procesados

-f - usa el archivo especificado

loco
fuente
5

Solo quiero agregar que si tiene una versión anterior de GNU tar anterior a la versión 1.22 cuando las opciones --xz y -J estuvieron disponibles, puede comprimir o descomprimir archivos tar.xz usando --use-compress-program xz. Por ejemplo,

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

o

tar --use-compress-program xz -xf example.tar.xz
ScottH
fuente
4

Si tar reconoce el formato de compresión, no necesita una bandera:

tar xvf *.tar.xz

Si necesita descomprimir la entrada manualmente, por ejemplo, porque su tar es demasiado viejo para reconocer xz, o necesita una ruta especial:

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

Las tuberías son más rápidas que crear un archivo intermedio sin comprimir, ¡y también usan menos espacio en disco!

Orion Lawlor
fuente
4

Me gusta dtrx

sudo apt install dtrx
dtrx your-file.tar.xz
Boris
fuente
3

Wow, esa es realmente buena. ¿Se hizo con 7zip en una Mac? Prueba esto:

7z x -so file.tar.xz | tar xf -

fuente
Requiere 7z, que no es lo que quiere, quiere hacerlo completamente en alquitrán.
jrg
Sí, gracias, ¡el "xz" me atrapó! Bueno, de todos modos es un paso :) Y tar J= tar xz, así que incluso podríamos escribir tar xzf file.tar.xzcomo "normal" tar xvfz file.tar.gz. Así que básicamente no hay diferencia. No se necesita un guión antes de usar el interruptor.
Es casi como si la respuesta fuera dada en la pregunta. :)
También me sorprendió porque tar zxf se equivocó en el archivo .xz, supongo que usar J todo el tiempo sería el camino a seguir.
Jorge Castro
2
¡Sip! La página del manual no está sincronizada con la fuente: buffer.c usa -J para lzma.
3

Ubuntu viene con Python (Python 2.7 y Python 3), que contiene los módulos necesarios para extraer archivos. Entonces, si por alguna razón tarfalta el comando (digamos que su administrador de sistemas lo ha eliminado y no tiene sudoprivilegios para instalarlo), puede usar:

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

Como guión corto, eso es más legible como:

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

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

Supongamos que creé un .xzarchivo con tar cJf thing.xz /etc/passwd. El archivo contendrá un etcdirectorio con el passwdarchivo dentro. El uso de la secuencia de comandos anterior dará como resultado un etcdirectorio creado en su directorio de trabajo actual, y dentro de él habrá un passwdarchivo. Por supuesto, esto siempre se puede extender especificando la ruta donde desea extraer dentro de la extractall()función.

Sergiy Kolodyazhnyy
fuente
0

unar es un programa bastante agradable y fácil de escribir, para desarchivar casi cualquier formato, incluidos 7z y RAR

parece estar escrito en (GNU) Objective-C y, por lo tanto, requiere la instalación de algunas gnustepbibliotecas (implementación de Objective-C de GNU) ( gnustep-base-runtimey libgnustep-base1.25)

si usa --install-sugiere o se ha configurado aptpara instalar paquetes sugeridos, unarsugerirá e instalará muchos programas GUI GNUStep que no son lo que desea

sudo apt install --no-install-suggests unar 
unar linux-source.tar.xz

creará el directorio de salida linux-sourceautomáticamente.

gato
fuente