To pytanie ma już odpowiedź tutaj:
Sposób, w jaki rozumiem użycie tar + gzip, tar
jest zwykle używany do konsolidacji grupy plików w jednym pliku, a następnie gzip
służy do kompresji tego pliku.
Niedawno dowiedziałem się, że tar
można również kompresować.
Ponieważ nie do końca rozumiem, jak działa kompresja @ jest to rdzeń, mam (prawdopodobnie absurdalne) obawy, że wysłanie wstępnie skompresowanego pliku .tar do gzip może uniemożliwić kompresowanie gzip, na ile pozwala na to jego potencjał i inne tego rodzaju rzeczy.
Moje pytanie brzmi w zasadzie: jakiej kombinacji metod args / kompresji należy użyć, aby utworzyć absolutnie najmniejszy plik tar.gz i jak to wygląda w wierszu poleceń?
command-line
compression
gzip
tar
Mario Zigliotto
źródło
źródło
Odpowiedzi:
Możesz też powiedzieć tarowi maksymalną kompresję użytkownika w ten sposób:
Dodatkowo, aby utrzymać porządek w envvars, możesz to zrobić:
źródło
Jak powiedziałeś - „ tar może również kompresować ”, oznacza to, że -
tar
nie zawsze sam kompresuje dane.Robi to tylko wtedy, gdy jest używane z tą
z
opcją. To też nie samo w sobie, ale - przekazując smołowane dane przez gzip.Jednak zamiast tego, jak zauważono w tej odpowiedzi, możesz potokować dwa polecenia:
tar
igzip
tak, że możesz jawnie określić poziom kompresji dlagzip
polecenia, aby osiągnąć najmniejszy rozmiar wyjściowy.Tutaj
9
określa maksymalny możliwy poziom kompresji.źródło
tar -cvf /path
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
iadvdef
aby uzyskać najmniejszy plik. Aby użyć tego do utworzenia najmniejszego możliwego uruchomienia pliku:advdef
Narzędziowy z AdvanceCOMP zwykle daje najmniejszy plik, ale jest również wózek spacerowy (tegz99
kontrole narzędzie, które nie uszkodzony plik przed zaakceptowaniem wyjścieadvdef
). Aby użyćadvdef
bezpośrednio, utwórz plik.tar.gz, jak chcesz. Następnie uruchomić: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:
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:
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:
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.
źródło
xz -9
zwykle zajmuje to około 5 razy więcejgz -9
czasu, a nie tylko 1,5 razy więcej niż twój stół sugeruje.gzip
opcja--best
(odpowiednik-9
) prosi o najwyższy poziom kompresji.źródło
--best
flagi: -9 jest mylące dla czytelnika.