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


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.


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.


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ą.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.