Więc muszę skompresować katalog z maksymalną kompresją.
Jak mogę to zrobić xz
? To znaczy, będę tar
też potrzebować, ponieważ nie mogę skompresować katalogu tylko xz
. Czy istnieje oneliner do produkcji np. foo.tar.xz
?
directory
tar
compression
LanceBaynes
źródło
źródło
man 1 xz
mówiit's not a good idea to blindly use -9 for everything like it often is with gzip(1) and bzip2(1).
-7 ... -9 [...] These are useful only when compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, respectively.
RTFM, aby uzyskać więcej informacji.Odpowiedzi:
Zakładając, że
xz
honoruje standardowy zestaw flag wiersza poleceń - w tym flag poziomu kompresji, możesz spróbować:źródło
-9e
to najlepszy poziom, ale potrwa to bardzo długo-9e
nie zawsze da ci najlepszy wynik - patrz punkt 8 tutaj rootusers.com/13-simple-xz-examples--threads=0
do xzZ najnowszym GNU
tar
w bash lub pochodnej powłoce:Przełącznik j małych znaków tar używa bzip, przełącznik J wielkich liter używa xz.
XZ_OPT
Zmienna pozwala ustawićxz
opcje, które nie mogą być przekazywane za pośrednictwem aplikacji, takich jak zawijającychtar
.To jest teraz maksymalne .
Sprawdź
man xz
inne opcje, które możesz ustawić (-e
/--extreme
może dać ci dodatkowe korzyści kompresji dla niektórych zestawów danych).źródło
rc
iakanga
.fish
,csh
,tcsh
Ies
jest głównym muszle, które nie obsługują. Tam użyjeszenv
polecenia.-9
i-e
xz, chcesz,XZ_OPT=-e9
ale jak zauważył @krzyk, -e jest bardzo wolnyXZ_OPT
nie jest funkcją zaimplementowaną wtar
. Jest to cechaxz
. Podczastar
wywoływaniaxz
zmienna env jest po prostu przekazywana.jest nawet lepszy niż
źródło
option -e, --extreme
Zmodyfikuj ustawienie kompresji (-0 ... -9), aby uzyskać nieco lepszy współczynnik kompresji bez zwiększania zużycia pamięci przez kompresor lub dekompresor (wyjątek: użycie pamięci kompresora może nieznacznie wzrosnąć przy ustawieniach -0 ... -2). Minusem jest to, że czas kompresji dramatycznie wzrośnie (można go łatwo podwoić).-9
nie powinienem używać-9e
, tak?XZ_OPT="-9e -T0" tar -cJf ...
Jeśli masz 16 GiB RAM (i nic więcej nie działa), możesz spróbować:
Będzie to wymagało 1,5 GiB do dekompresji i około 11 razy więcej do kompresji. Dostosuj odpowiednio dla mniejszej ilości pamięci.
Pomoże to tylko wtedy, gdy dane są w rzeczywistości tak duże, a w każdym razie nie pomoże TEGO dużo, ale nadal ...
Jeśli kompresujesz pliki binarne, dodaj --x86 jako pierwszą opcję xz. Jeśli grasz z plikami „multimedialnymi” (nieskompresowane audio lub mapy bitowe), możesz spróbować z --delta = dist = 2 (eksperymentuj z wartością, dobre wartości to 1..4).
Jeśli czujesz się bardzo ryzykowny, możesz spróbować grać z większą liczbą opcji LZMA, takich jak
(są to ustawienia domyślne, możesz wypróbować wartości od 0 do 4, a lc + lp nie może przekraczać 4)
Aby zobaczyć, w jaki sposób domyślne ustawienia wstępne mapują się na te wartości, możesz sprawdzić plik źródłowy src / liblzma / lzma / lzma_encoder_presets.c. Nie ma tam jednak większego zainteresowania (-e ustawia ładną długość na 273, a także dostosowuje głębokość).
źródło
Możesz wypróbować różne opcje, dla mnie -4e działa lepiej
Testowałem, uruchamiając:
Wygląda więc na to, że opcja -4e działa nieco lepiej niż -9e.
źródło
no difference = 660 4e better than 9e = 74 9e better than 4e = 17 total files = 751 tar 2 html 2 csv 2 xml 2 gz 2 ppt 2 eps 2 docx 2 gif 2 rpm 3 png 3 asv 3 xlsx 3 exe 3 rar 4 nc 4 txt 5 odt 6 xls 7 zip 7 doc 9 m 12 dat 17 other 109 pdf 133 135 jpg 270
txt 109 txt/pdf 135
tar
użyciu plikówxz
.tar --help
:-I, --use-compress-program=PROG
również kompresuj za pomocą zewnętrznych sprężarek:
zdekompresować zewnętrzne sprężarki:
lista archiwum kompresory zewnętrzne:
źródło
-I
dodanie wyjaśnienia opcji .tar
polecenie używaJ
flagi dla plików xz. Przykład:tar -cJvf foo.tar.xz foo/
źródło
J
Już wspomniano w odpowiedzi bdowning zaDla zainteresowanych
-e9
jest o 0,4% mniejszy, 20% wolniejszy przy kompresji, 3% wolniejszy przy dekompresji, w porównaniu do-9
typowego laptopa. Oto przebiegi czasowe w strukturze katalogów kodu źródłowego Pythona.Kompresja:
Dekompresja:
Rozmiar pliku:
źródło
To nie jest dokładna odpowiedź na twoje pytanie, ale możesz użyć jednego polecenia zamiast dwóch:
dodaje wszystkie pliki z katalogu „dir1” do archiwum archive.7z przy użyciu „ultras ettings”
inne obsługiwane formaty to: zip, gzip, bzip2 lub tar. w tym celu wystarczy wymienić
7z
po-t
.--źródło
man 7z
UWAGA: nie używaj tego polecenia do tworzenia kopii zapasowych plików systemowych oprócz plików osobistych, ponieważ format 7z nie przechowuje uprawnień systemu plików .
źródło
Na maszynie wielordzeniowej od wersji v5.2.0 xz-utils sprawdź:
Jeśli chcesz użyć maksymalnej liczby rdzeni i maksymalnej kompresji:
Lub ustaw -T na liczbę rdzeni, których chcesz użyć.
Następnie:
Może to również być przydatne do wyboru poziomu kompresji:
https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
źródło
Jeśli chcesz, aby zakończyło się to szybciej, używając wielu wątków, ale bez spowalniania systemu podczas wykonywania innej pracy, spróbuj dodać
-Tn
gdzie n oznacza liczbę wątków, których chcesz użyć, a takżenice
obniżyć kompresję do priorytetu bezczynności.Model (dla 4 wątków):
Spróbuj obejrzeć
top
lubhtop
kiedy zrobisz to w dużym katalogu (kilka GB). Mamy nadzieję, że powinieneś zobaczyć kilkaxz
wątków o wartości Nicei 19 (najniższy priorytet).Rozebrałem to również tak zwięźle, jak rozsądnie, na przykład:
-f -
inne odpowiedzi nie są po prostu potrzebne, ponieważtar
domyślnym wyjściem jest standardowe wyjście.Możesz
nice
również przetwarzać tar, ale nigdy nie uważałem tego za konieczne, ponieważxz
zawsze wąskie gardło procesora dla potoku.Praktyczna uwaga: rzadko używam
xz -9
do niczego, nie tyle ze względu na procesor lub czas, ale z powodu wysokich wymagań pamięci. Spójrz na https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO#Memory_requirements_on_compression .xz
Kompresor, jakbzip2
, ale w przeciwieństwie dogzip
, wykorzystuje więcej pamięci dla wyższych współczynników kompresji. Łącznie z tym, żexz
zużywa znacznie więcej pamięci niż jakikolwiek inny kompresor, możesz z łatwością zużyć ponad 600 MB pamięci. A jeśli używasz tej opcji,-T
aby włączyć kompresję wątkową, wymagania dotyczące pamięci idą jeszcze dalej. Tylko coś, o czym należy pamiętać, na przykład jeśli prowadzisz małą usługę na małej maszynie wirtualnej z pamięcią 1-2 GB, możesz przypadkowo spowodować wpływ.źródło
W systemie Mac OS X alternatywnym podejściem do przekazania parametru z
tar
jest użycie--options=
flagi. Na przykład,źródło