Często gzipuję katalogi w pracy. Zwykle robię to
tar -zcvf file.tar.gz /path/to/directory
Czy jest tutaj sposób na określenie poziomu kompresji? Chcę użyć najlepszej możliwej kompresji, nawet jeśli kompresja zajmuje więcej czasu.
linux
compression
tar
gzip
Lazer
źródło
źródło
top
i zobaczyć, używając procesora w przedziale 200% -400 $.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:
Lub możesz użyć:
-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.
źródło
tar cvf - /path/to/directory | gzip -9 - > file.tar.gz
file.tar
, ponieważgzip
dodaje rozszerzenie „.gz”.f -
? jeśli nie ma pliku, to jest stdin / outNowoczesne 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.
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.
źródło
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 obuf
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-
nagzip
wezwanie.Opcja
--best
(odpowiednik-9
) ustawia najwyższy poziom kompresji.źródło
xz
ipixz
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.
źródło
-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.I oczywiście tar tar macOS pochodzący z bsd musi być inny:
źródło