Zwykle ani gzip, ani tar nie mogą stworzyć „absolutnie najmniejszego tar.gz”. Istnieje wiele narzędzi do kompresji, które można skompresować do formatu gz. Napisałem skrypt bash „ gz99 ”, aby spróbować gzip
, 7z
i advdef
aby uzyskać najmniejszy plik. Aby użyć tego do utworzenia najmniejszego możliwego uruchomienia pliku:
tar c path/to/data | gz99 file.gz
advdef
Narzędziowy z AdvanceCOMP zwykle daje najmniejszy plik, ale jest również wózek spacerowy (te gz99
kontrole narzędzie, które nie uszkodzony plik przed zaakceptowaniem wyjście advdef
). Aby użyć advdef
bezpośrednio, utwórz plik.tar.gz, jak chcesz. Następnie uruchomić:
advdef -z -4 file.tar.gz
Spowoduje to utworzenie standardowego pliku gz, który może być odczytany przez gzip i tar jak zwykle, tylko trochę mniejszy. To jest najlepsze, co możesz zrobić z formatem gz.
Ponieważ dopiero niedawno dowiedziałeś się, że tar może się kompresować, i nie powiedziałeś, dlaczego chcesz mieć najmniejszy plik „.tar.gz”, możesz nie wiedzieć, że z plikami tar można korzystać bardziej wydajnych formatów, takich jak xz. Ogólnie rzecz biorąc, przejście na inny format może dać znacznie lepszą poprawę kompresji niż kręcenie się z opcjami gzip. Główną wadą xz jest to, że nie jest tak powszechny jak gzip, więc osoby, do których wysyłasz plik, mogą potrzebować zainstalować nowy pakiet. Jest również nieco wolniejszy, szczególnie podczas kompresji. Jeśli nie ma to dla Ciebie znaczenia i naprawdę potrzebujesz najmniejszego pliku 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, nadal możesz dekompresować jak zwykle:
tar xvf file.tar.xz
Aby szybko zorientować się, jak porównywane są te narzędzia do kompresji, rozważ efekt kompresji poprawki 3.1.1 z jądra systemu Linux:
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 (chociaż 7z -tgzip jest prawie tak samo dobry i znacznie mniej wadliwy). 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 kompresji trwającej zbyt długo.