Wie komprimiere ich mehrere Dateien in ein .xz-Archiv?

10

Ich möchte mehrere Bilder in ein .xz-Archiv komprimieren. Wie mache ich das?

Entfernte Grafiken
quelle

Antworten:

10

Obwohl, wie von Zacharee1 und Heemayl beschrieben, normalerweise das ist, was Sie tun möchten, besteht eine andere Möglichkeit darin, geteerte Daten an den Befehl weiterzuleiten :tar cJf archive files...xz

tar c files... | xz > archive.tar.xz

Da Ubuntu tardie JOption unterstützt , ist diese alternative Methode besonders nützlich, wenn Sie Optionen an übergeben möchten xz.

In diesem Beispiel tar und xzip ich einige TIFF-Dateien mit einem hohen Grad an Komprimierung ( -9to xz) und ausführlicher Ausgabe ( vto tar, -vto xz):

ek@Io:~/Pictures$ tar vc *.tif{,f} | xz -9v > pics.tar.xz
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
  100 %       207.3 KiB / 290.0 KiB = 0.715

Dies könnte natürlich auch in zwei explizit getrennten Schritten erfolgen:

ek@Io:~/Pictures$ tar vcf pics.tar *.tif{,f}
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
ek@Io:~/Pictures$ xz -9v pics.tar
pics.tar (1/1)
  100 %       207.3 KiB / 290.0 KiB = 0.715

Diese beiden Methoden sind in ihrer Funktionsweise eigentlich nicht gleichwertig, obwohl die .tar.xzDateien, die sie am Ende produzieren, gleich sein sollten (und waren, als ich sie getestet habe).

  • In der ersten, der Ausgang des tarIS verrohrt ( |) mit dem Eingang der xz. xzEmpfängt Daten von tarfast sofort und es wird nie eine unkomprimierte Zwischen-TAR-Datei erstellt. Dies bedeutet, dass der erste Weg im Wesentlichen äquivalent zu isttar cJf archive files... , mit Ausnahme der zusätzlichen Argumente, an die übergeben wird xz.
  • Im zweiten Befehl wird mit dem ersten Befehl ein unkomprimiertes Teerarchiv erstellt und im zweiten Befehl mit komprimiert xz. ( xzLöscht automatisch die Originaldatei, wenn sie fertig ist, es sei denn, sie wird mit -k/ aufgerufen --keep.)

Weitere Informationen finden Sie in diesem Beitrag von Rafael van Horn und den tarund xzManpages.

Eliah Kagan
quelle
1
+ 1..dies ist gut, wenn ein höheres (oder variierendes) Kompressionsverhältnis gewünscht wird ..
heemayl
2
Hallo 2015! Eine andere Möglichkeit, mit verschiedenen Komprimierungsstufen zu arbeiten, tar -Jbesteht darin, die Umgebungsvariable anzugeben XZ_OPTund den Aufruf so zu gestalten:XZ_OPT="-9v" tar -Jcf out.tar.xz [files]
Wug
2
@ Wug Das ist eine ausgezeichnete Idee. Es scheint mir, dass es eine eigene Antwort rechtfertigt. Bist du bereit das zu posten?
Eliah Kagan
13

Verwendung tarmit -JOption:

tar -cvJf images.tar.xz /directory/containing/images/*

tar wird verwendet, um mehrere Dateien zu einer (Archiv) zu kombinieren. Anschließend müssen wir das Archiv mithilfe des XZ-Komprimierungsalgorithmus komprimieren.

Von man tar:

-c, --create
       create a new archive
-v, --verbose
       verbosely list files processed
-J, --xz

-f, --file ARCHIVE
       use archive file or device ARCHIVE

Beachten Sie auch, dass images.tar.xzdies im aktuellen Verzeichnis erstellt wird, wenn Sie es an einem anderen Ort speichern möchten /full/path/to/images.tar.xz.

heemayl
quelle
hat mit dem Xzing mehrerer riesiger PSDs begonnen und um ehrlich zu sein, bietet das Archiv eine riesige Komprimierung! 400 MB + ist jetzt 200 MB
Distant Graphics
1
great..although xzist die langsamste unter xz, gzip, bzip2aufgrund seiner höheren Verdichtungsverhältnis als die others..the Langsamkeit lohnt sich zu viel mit , wenn Sie mehr Kompression wollen ..
heemayl
Meine psds insgesamt sind, wie 600-900 MB insgesamt xD
Distant Graphics
Sie sind gut zu gehen ....
heemayl
ein bisschen Fehler ._.
Ferne Grafiken
3

Verwenden Sie diesen Befehl : tar cJf <archive.tar.xz> <files>. Trennen Sie Dateipfade durch ein Leerzeichen.

Der Wanderer
quelle
Sie brauchen dies:-cfJ
AB
1
@AB: du brauchst nicht -vorne .. von man tar: A function letter need not be prefixed with ``-''..so tar cJfist absolut OK.
Heemayl
@heemayl Aber es scheint nicht zu funktionieren. Ich habe es ohne das '-' versucht, aber Teer ist nicht fertig.
AB
@heemayl Das habe ich mir gedacht.
TheWanderer
1
Beachten Sie, dass Sie bei Ihrer ersten Antwort bleiben sollten tar cJf, die OP eine andere Möglichkeit geben würde, dies zu tun, da meine Antwort bereits tar --cvJfzuerst behandelt wurde.
heemayl