Odpowiedzi:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
zakładając, że używasz bash. Zasadniczo ustaw zmienną środowiskową GZIP na „-9” i uruchom normalnie tar.
Ponadto - jeśli naprawdę chcesz najlepszej kompresji, nie używaj gzip. Użyj lzma lub 7z.
A gdy używasz gzip (co jest dobrym pomysłem z różnych powodów), rozważ użycie pigz
programu, a nie gzip
.
GZIP_OPT
, użycie powinno być takie samo.
Zamiast używać flagi gzip dla tar, gzip pliki ręcznie po procesie tar, a następnie możesz określić poziom kompresji dla programu gzip:
tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar
Lub możesz użyć:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
-9 w linii poleceń gzip mówi gzip, aby użył maksymalnego możliwego poziomu kompresji (domyślnie jest to -6).
Edycja: Naprawiono wiersz poleceń potoku na podstawie komentarza @depesz.
file.tar
, ponieważ gzip
dodaje rozszerzenie „.gz”.
f -
? jeśli nie ma pliku, to jest stdin / out
Nowoczesne wersje tar obsługują format archiwum xz (tar GNU, od 1.22 w 2009, Busybox od 1.17.0 w 2010).
Opiera się na lzma2 , trochę jak wersja 7-Zip gz . Daje to lepszą kompresję, jeśli jesteś w porządku z wymogiem konieczności obsługi xz.
tar -Jcvf file.tar.xz /path/to/directory
Właśnie się tutaj dowiedziałem (w zasadzie duplikat tego pytania, ale w wymianie stosu Uniksa), że istnieje również zmienna środowiskowa XZ_OPT = -9 do kontrolowania poziomu kompresji XZ podobnego do GZIP jeden w drugim poście.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
To drugie rozwiązanie Matrix Mole, ale nieco skrócone:
Podczas wywoływania tar opcja f
określa, że wynikiem jest plik. Ustawienie go na -
(stdout) powoduje, że tar zapisuje dane wyjściowe na stdout, co jest domyślnym zachowaniem bez obu f
i -
.
Jak podano na gzip
stronie podręcznika , jeśli nie określono żadnych plików, gzip skompresuje się ze standardowego wejścia. Nie ma potrzeby -
na gzip
wezwanie.
Opcja --best
(odpowiednik -9
) ustawia najwyższy poziom kompresji.
xz
i pixz
również. Jest to świetny sposób na kontrolowanie liczby wątków używanych do kompresji równoległej bez konieczności tworzenia pośredniego pliku .tar. W ten sposóbtar -cv /path/to/dir | pixz -p4 > output.tpxz
Istnieje również opcja określenia programu kompresji za pomocą -I. Może to obejmować opcję poziomu kompresji.
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
-I
arg, będą próbować traktować całość jako nazwę programu do wykonania, a zatem nie powiedzie się. Działa to przynajmniej od wersji tar 1.29 w wersji Debian Stretch.
top
i zobaczyć, używając procesora w przedziale 200% -400 $.