Jak skompresować wiele plików do archiwum .xz?

10

Chcę skompresować kilka obrazów do archiwum .xz. Jak mogę to zrobić?

Odległa grafika
źródło

Odpowiedzi:

10

Chociaż tak jak to szczegółowo opisano w Zacharee1 i heemayl, zwykle chcesz to zrobić, innym sposobem jest przesłanie danych smołowanych do polecenia:tar cJf archive files...xz

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

Ponieważ Ubuntu tarobsługuje tę Jopcję, ten alternatywny sposób jest szczególnie przydatny, gdy chcesz przekazać opcje xz.

W tym przykładzie tar i Xzip niektóre pliki TIFF o wysokim poziomie kompresji ( -9do xz) i pełne wyjście ( vdo tar, -vdo 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

Można to oczywiście zrobić w dwóch wyraźnie oddzielnych krokach:

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

Te dwa sposoby nie są tak naprawdę równoważne w działaniu, chociaż .tar.xzpliki, które tworzą, powinny być takie same (i były, kiedy to testowałem).

  • W pierwszej, wyjście z tarIs rurami ( |) do wejścia w xz. xzodbiera dane z tarniemal natychmiast i nigdy nie jest tworzony pośredni nieskompresowany plik tar. To znaczy, że pierwszy sposób jest zasadniczo równoważny dotar cJf archive files... , z wyjątkiem dodatkowych argumentów przekazanych do xz.
  • W drugim, nieskompresowane archiwum tar jest tworzone przez pierwsze polecenie, a następnie kompresowane przez xzw drugim poleceniu. ( xzautomatycznie usuwa oryginalny plik po zakończeniu, chyba że zostanie wywołany z -k/ --keep.)

Dla dalszego czytania, zobacz ten post Rafael van Horn a tari xzstrony podręcznika.

Eliah Kagan
źródło
1
+ 1 .. jest to dobre, gdy pożądany jest wyższy (lub zmieniający się) stopień kompresji.
heemayl
2
Witaj 2015! Innym sposobem na osiągnięcie różnych poziomów kompresji za pomocą tar -Jjest określenie zmiennej środowiskowej XZ_OPT, co sprawia, że ​​wywołanie przypomina:XZ_OPT="-9v" tar -Jcf out.tar.xz [files]
Wug
2
@ Wug To świetny pomysł. Wydaje mi się, że uzasadnia to swoją osobną odpowiedź. Czy chcesz to opublikować?
Eliah Kagan,
13

Użyj tarz -Jopcją:

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

tar służy do łączenia wielu plików w jeden (Archiwum), a następnie musimy skompresować archiwum za pomocą algorytmu kompresji XZ.

Od 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

Pamiętaj też, że images.tar.xzzostanie utworzony w bieżącym katalogu, jeśli chcesz go zapisać w innym miejscu /full/path/to/images.tar.xz.

heemayl
źródło
rozpoczął proces Xzing kilku ogromnych PSD i szczerze mówiąc, archiwum oferuje ogromną kompresję! 400 MB + to teraz 200 MB
Distant Graphics
1
great..although xzjest najwolniejszy spośród xz, gzip, bzip2ze względu na jego wyższym współczynnikiem kompresji niż others..the powolność warto zajmować się jeśli chcesz więcej kompresję ..
heemayl
Łącznie moje psds wynoszą około 600-900 MB xD
Distant Graphics
dobrze jest iść ...
heemayl
jakiś błąd ._.
Odległa grafika
3

Użyj tego polecenia: tar cJf <archive.tar.xz> <files>. Oddziel ścieżki pliku spacją.

Wędrowiec
źródło
potrzebujesz tego:-cfJ
AB
1
@AB: nie potrzebujesz -z przodu .. od man tar: A function letter need not be prefixed with ``-''więc tar cJfjest absolutnie OK.
heemayl
@ heemayl Ale to chyba nie działa. Próbowałem bez „-”, ale smoła nie została ukończona.
AB
@ heemayl Tak myślałem.
Wędrowiec
1
Zauważ, że powinieneś trzymać się swojej pierwszej odpowiedzi tar cJf, która dałaby OP inny sposób na zrobienie tego, ponieważ moja odpowiedź była już tar --cvJfna początku
omówiona