¿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?


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 .


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.


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


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.


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 .


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

14
tar -xvf package.tar.xz

-x - extraer archivos

-v - lista de archivos procesados

-f - usa el archivo especificado


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

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!



3

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

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

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.