Wie dekomprimiere ich einen Tarball, der .xz verwendet?


776

Ich bin es gewohnt, Tarballs mit einem -xfzFlag zu extrahieren, das gzip- und bzip2-Archive behandelt.

Kürzlich bin ich auf eine .tar.xzDatei gestoßen und möchte sie in einem Schritt mit dekomprimieren tar. Wie kann ich das tun?


10
Hinweis: Möglicherweise müssen Sie installieren, xz-utilswenn nicht bereits vorhanden
Tobias Kienzler

hier ist mein kleines Skript , die tar - Flaggen für Sie errät: gist.github.com/shime/5908634
shime

2
tar --helplistet tarFlags auf. -xzfgilt für gzip. -xjfzu bz2. -xJfzu xz.
Noobninja

Antworten:


1017

Ubuntu enthält GNU tar, das das Format von selbst erkennt! Ein Befehl funktioniert mit jeder unterstützten Komprimierungsmethode gemäß Handbuch .

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

usw. Wenn tar einen Cannot execFehler ausgibt, müssen Sie möglicherweise sudo apt install xz-utilszuerst.


41
Es ist eine Funktion von GNU tar. Ich weiß nichts über konkurrierende Implementierungen, aber GNU tar sollte für Ubuntu am relevantesten sein. gnu.org/software/tar/manual/tar.html#SEC131
ramslök

42
Wenn Sie tar: xz: Cannot exec: No such file or directoryxz-utilssudo apt-get install xz-utils
Collin Anderson

10
Dies ist keine Antwort, es ist eine Antwort, bei der es Ihnen egal ist, obwohl Sie darum gebeten haben. Ersparen Sie sich einen Gedanken für Leute, die nicht auf dem neuesten Stand sind
Sean Houlihane

6
Für welche Version von ist tardas jeweilige Flag nicht mehr erforderlich?
Mark Tomlin

8
@ SeanHoulihane, es ist keine Antwort, da das OP ein kleines XY-Problem gestellt hat . Ramslök gab das OP besser als gewünscht, und das beinhaltete ein effektives "Sie kümmern sich nicht um die Antwort, obwohl Sie fragten", was angemessen war, weil es wahr war.
Christos Hayward

331

Versuchen

tar -xJf file.pkg.tar.xz

Das -Jist das Flag, das sich speziell mit .xz-Dateien beschäftigt.


59
Ich frage mich, wie viele Flaggen wir 2020 haben werden. Wie ... 45 verschiedene Kompressionen? Das Wissen um Teerschalter ist in Linux-Fu bereits ein Schwarzgurt. : /
Shiki

22
@Shiki: Das ist wahrscheinlich der Grund, warum Sie das Komprimierungsformat-Flag nicht mehr angeben müssen. (Siehe Ramslöks Antwort.)
Nate CK


6
Dies sollte absolut die akzeptierte Antwort sein, da es die Frage für jede Version von .xz
Teerunterstützung

8
Im Jahr 2030 werden Flaggen Turing vollständig ... 2040 werden sie
fühlend

80

Wenn die tarLösungen aus irgendeinem Grund nicht funktionieren (möglicherweise, weil Sie die integrierten OS X-Funktionen verwenden), versuchen Sie Folgendes:

unxz < file.tar.xz > file.tar

… Was äquivalent ist zu:

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

Verwenden Sie dann tar, um die Datei zu entpacken.


2
Das sollte mit einem Rohr konstruierbar sein.
Gerrit

6
Ich habe das Gefühl, du könntest es einfach unxz < file.tar.xz | tar xoder ähnlich machen.
dreißigunddreißig

7
das hat bei mir geklappt, wo tar xfnicht. Ubuntu 12.04
Philshem

Zumindest auf meinem Ubuntu-Rechner unxzist das nicht gleichbedeutend mit xz -dc, sondern mit xz -d. So extrahieren file.tar.xzzu file.tar, würde man einfach schreiben unxz file.tar.xz. Wenn Sie ein Äquivalent zu xz -dc, dekomprimieren zu stdout, verwenden Sie xzcat. Zum Beispiel xzcat file.tar.xz | tar x.
Nwellnhof

30

xz ist ein verlustfreier Datenkompressor. Sie müssen den Teerball aus xz extrahieren und dann den Teer extrahieren:

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

Dann wissen Sie, einen Teer zu extrahieren

tar -xf my_archive.tar

Quelle: XZ Utils - Wikipedia .


1
Beste Antwort. xzbenötigt keine stdout Weiterleitung. Noch besser:unxz -k
Mark Jeronimus

@ MarkJeronimus Ich finde das nicht so gut, da es eine Zwischendatei erstellt. Die Verwendung von GNU-Teer oder einer Pipe sollte weniger Ressourcen erfordern.
Melebius

15

Ich hatte das gleiche Problem, der tar xfBefehl konnte es nicht extrahieren. Um dies zu beheben, müssen Sie das xz-utilsPaket installieren . Die Lösung war:

sudo apt-get install xz-utils

dann:

tar xf myfile.tar.xz

14
tar -xvf package.tar.xz

-x - Dateien extrahieren

-v - Verarbeitete Dateien ausführlich auflisten

-f - Verwenden Sie die angegebene Archivdatei


5

Ich möchte nur hinzufügen, dass Sie tar.xz-Dateien mit komprimieren oder dekomprimieren können , wenn Sie eine alte Version von GNU tar vor Version 1.22 haben, als die Optionen --xz und -J verfügbar wurden --use-compress-program xz. Zum Beispiel,

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

oder

tar --use-compress-program xz -xf example.tar.xz

4

Wenn tar das Komprimierungsformat erkennt, benötigen Sie kein Flag:

tar xvf *.tar.xz

Wenn Sie die Eingabe manuell dekomprimieren müssen, z. B. weil Ihr Teer zu alt ist, um xz zu erkennen, oder wenn Sie einen speziellen Pfad benötigen:

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

Pipes sind schneller als das Erstellen einer unkomprimierten Zwischendatei und belegen auch weniger Speicherplatz!



3

Wow, das ist wirklich gut. Wurde es mit 7zip auf einem Mac gemacht? Versuche dies:

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

Benötigt 7z, was er nicht will - er will es ganz in Teer tun.
jrg

Ja, danke - das "xz" hat mich erwischt! Naja, es ist sowieso ein Schritt :) Und tar J= tar xz, also könnten wir sogar tar xzf file.tar.xzwie "normal" schreiben tar xvfz file.tar.gz. Also im Grunde kein Unterschied. Vor Verwendung des Schalters ist kein Bindestrich erforderlich.

Es ist fast so, als ob die Antwort in der Frage gegeben wurde. :)

Ich wurde auch abgeworfen, weil tar zxf einen Fehler in der .xz-Datei gemacht hat. Ich nehme an, dass es der richtige Weg wäre, immer nur J zu verwenden.
Jorge Castro

2
Jep! Die Handbuchseite ist nicht mit der Quelle synchronisiert: buffer.c verwendet -J für lzma.

3

Ubuntu wird mit Python (Python 2.7 und Python 3) ausgeliefert, das die erforderlichen Module zum Extrahieren von Archiven enthält. Wenn also aus irgendeinem Grund der tarBefehl fehlt (sagen Sie, Ihr Sysadmin hat ihn entfernt und Sie haben keine sudoBerechtigung, ihn zu installieren), können Sie Folgendes verwenden:

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

Als kurzes Skript ist dies lesbarer als:

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

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

Angenommen, ich habe eine .xzDatei mit erstellt tar cJf thing.xz /etc/passwd. Das Archiv enthält ein etcVerzeichnis mit einer darin enthaltenen passwdDatei. Die Verwendung des obigen Skripts führt dazu, dass ein etcVerzeichnis in Ihrem aktuellen Arbeitsverzeichnis erstellt wird und sich darin eine passwdDatei befindet. Natürlich kann dies jederzeit erweitert werden, indem der Pfad angegeben wird, den Sie in der extractall()Funktion extrahieren möchten .


0

unar ist ein ziemlich nettes einfaches Programm und einfach zu tippen, um fast jedes Format einschließlich 7z und RAR zu entarchivieren

es scheint in (GNU) Objective-C geschrieben zu sein und erfordert daher die Installation einiger gnustep(GNUs Objective-C-Implementierung) Bibliotheken ( gnustep-base-runtimeund libgnustep-base1.25)

Wenn Sie --install-suggestions verwenden oder die aptInstallation vorgeschlagener Pakete konfiguriert haben , unarwerden viele GUI GNUStep-Programme vorgeschlagen und installiert, die nicht Ihren Wünschen entsprechen

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

Das Ausgabeverzeichnis wird linux-sourceautomatisch erstellt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.