Zazwyczaj ani gzip ani tar nie są w stanie utworzyć “absolutnie najmniejszego tar.gz”. Istnieje wiele narzędzi do kompresji, które potrafią skompresować do formatu gz. Napisałem skrypt basha gz99 “, który próbuje gzip
, 7z
i advdef
aby uzyskać najmniejszy plik. Aby użyć tego do stworzenia najmniejszego możliwego pliku uruchom:
tar c path/to/data | gz99 file.gz
Narzędzie advdef
z AdvanceCOMP zazwyczaj daje najmniejszy plik, ale jest również podatne na błędy (narzędzie gz99
sprawdza, czy nie uszkodziło pliku przed zaakceptowaniem wyjścia advdef
). Aby użyć advdef
bezpośrednio, utwórz plik.tar.gz jakkolwiek chcesz. Następnie uruchom:
advdef -z -4 file.tar.gz
Stworzy to standardowy plik gz, który może być odczytany przez gzip i tar jak zwykle, tylko trochę mniejszy. Jest to najlepsze, co można zrobić z formatem gz.
Ponieważ dopiero niedawno dowiedziałeś się, że tar potrafi kompresować, i nie powiedziałeś, dlaczego chcesz mieć najmniejszy plik ”.tar.gz", możesz nie wiedzieć, że istnieją bardziej wydajne formaty plików tar, takie jak xz. Ogólnie rzecz biorąc, przejście na inny format może dać znacznie lepszy efekt kompresji, niż bawienie się opcjami gzip. Główną wadą xz jest to, że nie jest on tak powszechny jak gzip, więc osoby, do których wysyłasz plik, mogą być zmuszone do zainstalowania nowego pakietu. Ma również tendencję do bycia nieco wolniejszym, szczególnie podczas kompresji. Jeśli to nie ma dla ciebie znaczenia i naprawdę chcesz mieć najmniejszy plik tar, spróbuj:
tar cv path/to/data | xz -9 > file.tar.xz
Nowoczesne wersje tar, na przykład na Ubuntu 13.10, automatycznie wykrywają skompresowane pliki. Więc nawet jeśli używasz kompresji xz, możesz dekompresować jak zwykle:
tar xvf file.tar.xz
Aby dać szybki pogląd na porównanie tych narzędzi do kompresji, rozważ efekt kompresji patch-3.1.1 z jądra linuxa:
utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996
W tym trywialnym przykładzie widzimy, że aby uzyskać najmniejszy gz potrzebujemy advdef (choć 7z -tgzip jest prawie tak samo dobry i o wiele mniej zabugowany). Widzimy również, że przejście na xz daje nam znacznie więcej miejsca niż próba wyciśnięcia jak najwięcej ze starego formatu gz, bez zbyt długiej kompresji.