Erstellen Sie eine tar.xz in einem Befehl

159

Ich versuche, ein .tar.xzkomprimiertes Archiv in einem Befehl zu erstellen . Was ist die spezifische Syntax dafür?

Ich habe es versucht tar cf - file | xz file.tar.xz, aber das funktioniert nicht.

George K.
quelle

Antworten:

241

Verwenden Sie die -JKomprimierungsoption für xz. Und denk man tardran :)

tar cfJ <archive.tar.xz> <files>

Bearbeiten 10.08.2015:

Wenn Sie die Argumente tar mit Bindestrichen übergeben (z. tar -cfB. im Gegensatz zu tar cf), muss die -fOption als letztes verwendet werden , da sie den Dateinamen angibt (danke an @ABB für den Hinweis!). In diesem Fall sieht der Befehl folgendermaßen aus:

tar -cJf <archive.tar.xz> <files>

quelle
5
Wenn Sie vdem Befehl switch ( tar -cJvf) hinzufügen , um ausführlich zu sein, werden die Dateien angezeigt, die dem Archiv hinzugefügt werden.
Stuart Cardall
7
Da die Reihenfolge beim Bindestrich wichtig ist, ist es wahrscheinlich am besten anzunehmen, dass die Reihenfolge immer wichtig ist, und die fletzte auch ohne Bindestrich zu setzen.
mwfearnley
1
Ist es möglich, xz-Parameter wie -e (--extended) zu übergeben? Anscheinend wird es standardmäßig nicht erweitert verwendet.
Chmike
3
tarunter macOS scheint zu unterstützen, -Jaber die Funktion wird nicht in der Manpage angegeben. Musste es hier nachschlagen. Obwohl sie XZ im Abschnitt über --options...
Cbarrick
1
@chmike Umgebungsvariable XZ_OPT verwenden. ZB XZ_OPT = "- 9e -T0".
Dzenly
50

Switch -Jfunktioniert nur auf neueren Systemen. Der universelle Befehl lautet:

So erstellen Sie ein .tar.xz-Archiv

tar cf - directory/ | xz -z - > directory.tar.xz

Erläuterung

  1. tar cf - directoryliest das Verzeichnis / und beginnt, es in das TAR-Format zu bringen. Die Ausgabe dieser Operation wird auf der Standardausgabe generiert.

  2. | leitet die Standardausgabe an die Eingabe eines anderen Programms weiter ...

  3. ... was zufällig ist xz -z -. XZ ist so konfiguriert, dass -zdas Archiv von der Standardeingabe ( -) komprimiert ( ) wird.

  4. Sie leiten die Ausgabe von xzin die tar.xzDatei um.

Wojciech Adam Koszek
quelle
16
-fbedeutet nicht "aus Datei", wenn an übergeben xz. Stattdessen ist es die Abkürzung für --force(siehe xz (1) für Details) und wird am besten nur verwendet, wenn dies erforderlich ist.
Eliah Kagan
@EliahKagan behoben. Vielen Dank.
Wojciech Adam Koszek
2
Um die Multithread-Komprimierung zu verwenden, kann die Option -T0 verwendet werden:tar cf - directory/ | xz -z -T0 - > directory.tar.xz
oidualc
Ein weiterer Vorteil ist, dass Sie die Komprimierungsstufe oder eine andere Option für xz einfach in der Befehlszeile angeben können. Zum Beispiel, wenn Sie die Komprimierung beschleunigen möchten und sich nicht so sehr um die Größe kümmern möchten, die Sie verwenden können, -1 -T0oder -0 -T0um Optionen, die normalerweise in einer vergleichbaren oder schnelleren Zeit immer noch eine kleinere Datei als gzip liefern, während die Standardeinstellung -6erheblich langsamer ist als gzip.
Fgwaller
38

Wenn Sie den Pipe-Modus mögen, ist dies die sauberste Lösung:

tar c some-dir | xz > some-dir.tar.xz

Es ist nicht erforderlich, die fOption zu setzen, um mit Dateien umzugehen, und dann -anzugeben, dass die Datei die Standardeingabe ist. Es ist auch nicht erforderlich, die -zOption für anzugeben xz, da dies die Standardeinstellung ist.

Es funktioniert mit gzipund bzip2auch:

tar c some-dir | gzip > some-dir.tar.gz

oder

tar c some-dir | bzip2 > some-dir.tar.bz2

Das Dekomprimieren ist auch ganz einfach:

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x

Wenn Sie nur ein tarArchiv haben, können Sie Folgendes verwenden cat:

cat archive.tar | tar x

Wenn Sie nur die Dateien auflisten müssen, verwenden Sie tar t.

Rafael van Horn
quelle
8

Verwenden von xz-Komprimierungsoptionen

Wenn Sie Komprimierungsoptionen für xzoder unter tarMacOS verwenden möchten, möchten Sie wahrscheinlich die tar -cJfSyntax vermeiden .

Nach man xzder Art und Weise , dies zu tun ist:

tar cf - baz | xz -4e > baz.tar.xz

Weil mir das Format von Wojciech Adam Koszek gefallen hat , aber keine Informationen:

  1. c Erstellt ein neues Archiv für die angegebenen Dateien.
  2. fliest aus einem Verzeichnis (am besten diese Sekunde setzen, weil -cf! = -fc)
  3. - Ausgänge zum Standardausgang
  4. | Pipes werden an den nächsten Befehl ausgegeben
  5. xz -4eAnrufe xzmit der -4eKomprimierungsoption. (gleich -4 --extreme)
  6. > baz.tar.xz Leitet die geteerte und komprimierte Datei an baz.tar.xz

Wo -4eist, verwenden Sie Ihre eigenen Komprimierungsoptionen. Ich verwende oft -kauf --keepdie Originaldatei und -9für wirklich starke Kompression. -zmanuell xzauf zip einstellen , standardmäßig jedoch zippen, wenn nicht anders angegeben.

Zum Dekomprimieren und Entpacken

Echo Rafael van Horn , zu dekomprimieren und entpacken (siehe Anmerkung unten):

xz -dc baz.tar.xz | tar x

Hinweis: Verwenden Sie im Gegensatz zu Rafaels Antwortxz -dc anstelle von catxz. Die Dokumente empfehlen dies, falls Sie dies für die Skripterstellung verwenden. Am besten haben Sie die Angewohnheit, -doder --decompressstatt zu verwenden unxz. Wenn Sie jedoch müssen, ist die Verwendung dieser Befehle über die Befehlszeile in Ordnung.

Connor
quelle
Gibt es einen bestimmten Grund, warum die tar -cJfSyntax unter MacOS nicht verwendet wird? Nur neugierig, weil ich das gerade tat und es zu funktionieren schien.
Lo-Tan
2
@ Lo-Tan Es funktioniert, wenn Sie Teer haben. Als ich es benutzte, hatte ich nicht die richtige Version von Teer, also funktionierte es nicht für mich. Ich wollte auch die Komprimierungsoptionen für xz verwenden, was Sie nicht tun können, wenn Sie tar verwenden. Außerdem ist die Piping-Syntax für mich leichter zu merken, daher verwende ich diese eher. Aber für jeden sein eigenes
Connor
4

Versuche dies: tar -cf file.tar file-to-compress ; xz -z file.tar

Hinweis:

  1. tar.gz und tar.xz sind nicht dasselbe; xz bietet eine bessere Komprimierung.
  2. Verwenden Sie keine Pipe, | da hierdurch Befehle gleichzeitig ausgeführt werden. Verwendung ;oder &führt Befehle einen nach dem anderen.
Jhim Preston
quelle
+1 Auf RHEL 5.10 sehe ich keine JOption, aber das funktioniert. Ich denke du brauchst RHEL6.
Brian
2
Warum nicht die Befehle anpassen, um die Ausgabe von tar nach xz zu leiten?
mwfearnley
@mwfearnley Ich denke, der Hinweis soll lediglich betonen, dass die Befehle nacheinander ausgeführt werden müssen. Da der Dateiname in beiden Befehlen verwendet wird, werden keine Daten aus der Standardausgabe oder -eingabe geschrieben oder gelesen. Wenn Sie den Befehl ohne Angabe des Dateinamens verwenden, können sie wie folgt verkettet werden tar -c file-to-compress | xz -z > file.tar.xz.
Jack Q
Mit &wird kein Befehl nach dem anderen gestartet. Stattdessen wird der erste als Hintergrundprozess gestartet.
Luis Lavaire