Comment décompresser une archive qui utilise .xz?

775

J'ai l'habitude d'extraire des archives avec un -xfzdrapeau, qui gère les archives gzip et bzip2.

Récemment, je suis tombé sur un .tar.xzfichier et je voudrais le décompresser en une étape en utilisant tar, comment puis-je le faire?

Jorge Castro
la source
10
notez que vous devrez peut-être installer le logiciel xz-utilss'il n'est pas déjà présent
Tobias Kienzler
voici mon petit script qui devine les drapeaux de goudron pour vous: gist.github.com/shime/5908634
shime
2
tar --helpliste des tardrapeaux. -xzfs'applique à gzip. -xjfà bz2. -xJfà xz.
noobninja

Réponses:

1016

Ubuntu inclut GNU tar, qui reconnaît le format par lui-même! Une commande fonctionne avec toutes les méthodes de compression prises en charge, conformément au manuel .

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

etc. Si tar donne une Cannot execerreur, vous devrez peut-être d' sudo apt install xz-utilsabord.

Ramlök
la source
41
C'est une fonctionnalité de GNU tar. Je ne connais pas les implémentations concurrentes, mais GNU tar devrait être le plus pertinent pour Ubuntu. gnu.org/software/tar/manual/tar.html#SEC131
ramslök
42
si vous rencontrez des problèmes tar: xz: Cannot exec: No such file or directory, installez xz-utils:sudo apt-get install xz-utils
Collin Anderson
10
Ce n'est pas une réponse, c'est une réponse "vous ne vous souciez pas de la réponse, même si vous l'avez demandée". Pensez aux personnes qui ne sont pas à la dernière place
Sean Houlihane le
6
Quelle version de tarne nécessite plus le drapeau spécifique?
Mark Tomlin
9
@SeanHoulihane, ce n'est pas une réponse parce que l'OP a posé un problème mineur à XY . ramslök a donné au PO meilleur que ce qui avait été demandé, ce qui incluait un message efficace "Vous ne vous souciez pas de la réponse, même si vous l'avez demandé", ce qui était approprié parce que c'était vrai.
Christos Hayward
332

Essayer

tar -xJf file.pkg.tar.xz

Le -Jest le drapeau qui traite spécifiquement des fichiers .xz.

jrg
la source
60
Je me demande combien de drapeaux aurons-nous en 2020. Comme ... 45 compressions différentes? Connaître les commutateurs tar est déjà une ceinture noire sous Linux-fu. : /
user10570
22
@ Shiki: C'est probablement pourquoi cela ne vous oblige plus à spécifier le drapeau de format de compression. (Voir la réponse de ramslök.)
Nate CK,
27
xkcd.com/1168
Wordzilla
6
Cela devrait totalement être la réponse acceptée, car elle répond à la question pour toute version de tar supportant.xz
pospi
9
En 2030, les drapeaux deviennent Turing complets ... 2040, ils deviennent sensibles
utilisateur1359
80

Si, pour une raison quelconque, les tarsolutions ne fonctionnent pas (peut-être parce que vous utilisez les fonctions intégrées OS X), essayez ceci:

unxz < file.tar.xz > file.tar

… Qui équivaut à:

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

Puis utilisez tarpour décompresser le fichier.

Mathias Bynens
la source
2
Cela devrait être constructible avec un tuyau.
gerrit
6
Je sens que vous pourriez faire unxz < file.tar.xz | tar xou similaire.
Trentenaire,
7
cela a fonctionné pour moi, où tar xfn'a pas fonctionné. Ubuntu 12.04
Philshem
Au moins sur ma machine Ubuntu, unxzn’est pas équivalent à xz -dc, mais à xz -d. Donc , pour extraire file.tar.xzà file.tar, vous auriez tout simplement écrire unxz file.tar.xz. Si vous voulez un équivalent à xz -dc, en décompressant sur stdout, utilisez xzcat. Par exemple xzcat file.tar.xz | tar x.
Nwellnhof
31

xz est un compresseur de données sans perte. Vous devrez extraire la boule de goudron de xz puis extraire le goudron:

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

Alors tu sais extraire un goudron

tar -xf my_archive.tar

Source: XZ Utils - Wikipedia .

Foxx
la source
1
Meilleure réponse. xzn'a pas besoin de redirection stdout. Encore mieux:unxz -k
Mark Jeronimus
@ MarkJeronimus Je ne trouve pas cela si bon car cela crée un fichier intermédiaire. L'utilisation de GNU tar ou d'un pipe devrait demander moins de ressources.
Melebius le
16

J'ai eu le même problème, la tar xfcommande n'a pas pu l'extraire. Pour résoudre ce problème, vous devez installer le xz-utilspackage. La solution était:

sudo apt-get install xz-utils

ensuite:

tar xf myfile.tar.xz
Zsolt Sky
la source
14
tar -xvf package.tar.xz

-x - extraire des fichiers

-v - liste verbalement les fichiers traités

-f - utilise le fichier archive spécifié

nsane
la source
5

Je veux juste ajouter que si vous avez une ancienne version de GNU tar antérieure à la version 1.22 lorsque les options --xz et -J sont disponibles, vous pouvez compresser ou décompresser les fichiers tar.xz à l'aide de --use-compress-program xz. Par exemple,

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

ou

tar --use-compress-program xz -xf example.tar.xz
ScottH
la source
4

Si tar reconnaît le format de compression, vous n'avez pas besoin d'indicateur:

tar xvf *.tar.xz

Si vous devez décompresser l’entrée manuellement, par exemple parce que votre tar est trop ancien pour reconnaître xz, ou si vous avez besoin d’un chemin spécial:

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

Les pipes sont plus rapides que de créer un fichier intermédiaire non compressé et utilisent également moins d'espace disque!

Orion Lawlor
la source
4

J'aime dtrx

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

Wow, c'est un très bon. At-il été fait avec 7zip sur un Mac? Essaye ça:

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

la source
Nécessite 7z, ce qui n'est pas ce qu'il veut - il veut le faire entièrement en goudron.
Jrg
Oui, merci - le "xz" m'a eu! Bon, c’est quand même un pas :) Et tar J= tar xz, alors on pourrait même écrire tar xzf file.tar.xzcomme "normal" tar xvfz file.tar.gz. Donc, fondamentalement, aucune différence. Aucun tiret nécessaire avant d'utiliser le commutateur.
C'est presque comme si la réponse avait été donnée à la question. :)
J’ai aussi été ébranlé parce que tar zxf était erroné dans le fichier .xz, je suppose qu’utiliser J tout le temps serait la meilleure solution.
Jorge Castro
2
Ouaip! La page de manuel n'est pas synchronisée avec la source: buffer.c utilise -J pour lzma.
3

Ubuntu est livré avec Python (Python 2.7 et Python 3), qui contient les modules nécessaires à l'extraction des archives. Donc, si pour quelque raison que ce soit, la tarcommande est manquante (par exemple, votre administrateur système l’a supprimée et vous n’avez pas le sudoprivilège de l’installer), vous pouvez utiliser:

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

En tant que script court, il est plus lisible que:

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

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

Supposons que j'ai créé un .xzfichier avec tar cJf thing.xz /etc/passwd. L'archive contiendra un etcrépertoire avec le passwdfichier à l'intérieur. En utilisant le script ci-dessus, vous obtiendrez un etcrépertoire créé dans votre répertoire de travail actuel, dans lequel se trouvera un passwdfichier. Bien sûr, cela peut toujours être étendu en spécifiant le chemin où vous voulez extraire l'intérieur de la extractall()fonction.

Sergiy Kolodyazhnyy
la source
0

unar est un programme assez simple et facile à taper, pour désarchiver presque tous les formats, y compris 7z et RAR

il semble être écrit en (GNU) Objective-C et nécessite donc l'installation de certaines gnustepbibliothèques (implémentation de GNU Objective-C) ( gnustep-base-runtimeet libgnustep-base1.25)

si vous utilisez --install-suggère ou avez configuré aptpour installer les paquetages suggérés, unarsuggérera et installera de nombreux programmes GNUtep de l'interface graphique qui ne sont pas ce que vous voulez

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

il créera linux-sourceautomatiquement le répertoire de sortie .

chat
la source