Jaka jest najszybsza metoda kompresji dla dużej liczby plików?

14

Muszę skompresować katalog zawierający około 350 000 dość małych plików, które łącznie wynoszą około 100 GB. Korzystam z OSX i obecnie używam standardowego narzędzia „Kompresuj”, które konwertuje ten katalog do pliku .zip. Czy jest na to szybszy sposób?

Kolec
źródło
Prawdopodobnie nie możesz pokonać tar, ponieważ tak naprawdę nie kompresuje, tylko archiwizuje bez konkretnych opcji, które to umożliwiają. W odpowiedziach chciałbym zobaczyć dowód, bez opinii ...
Daniel Beck
1
Zależy, ile chcesz kompresji.
ta.speot.is
1
Skończyło się na użyciu tar i ze względu na szybkość nie próbowałem go jeszcze kompresować. Był w stanie ukończyć na czas dla tego, czego potrzebowałem. Dzięki!
Spike,
@DanielBeck, Problem z tar polega na tym, że nie pokazują drzewa katalogów. Aby nawet uzyskać „widok”, musimy rozpakować całą zawartość tar. Czy istnieją alternatywy dla tar, które pokazują widok katalogu?
Pacerier

Odpowiedzi:

15

W przypadku katalogów tarużyłbym potokowej wersji bzip2z maksymalną kompresją.

prosta droga to

tar cfj archive.tar.bz2 katalog-do-archiwizacji / 

Działa to świetnie, jeśli nie zamierzasz pobierać małych zestawów plików z archiwum
i planujesz po prostu wyodrębnić całą zawartość, ilekroć jest to wymagane.
Jednak, jeśli zrobić chcą dostać mały zestaw plików out, to nie jest tak źle.

Wolę wywoływać takie archiwa filename.tar.bz2i rozpakowywać je za pomocą xfjopcji „ ”.

Rura o maksymalnej kompresji wygląda tak,

tar cf - katalog-do-archiwizacji / | bzip2 -9 -> archive.tar.bz2  
# ^ potokuj tarball stąd, aby spakować ^ do pliku archiwum. 

Uwaga: bzip2metoda „ ” i większa kompresja są zwykle wolniejsze niż zwykłe gzipz „ tar cfz”.

Jeśli masz szybką sieć, a archiwum zostanie umieszczone na innym komputerze,
możesz przyspieszyć za pomocą potoku w całej sieci (efektywnie używając dwóch komputerów razem).

tar cf - katalog / | ssh użytkownik @ serwer "bzip2 -9 -> /target-path/archive.tar.bz2"  
# ^ potokuj tarball przez sieć, aby skompresować ^ i zarchiwizować na zdalnym komputerze.

Niektóre referencje,

  1. Linux Journal: porównanie narzędzi kompresji , 28 lipca 2005 r
  2. gzip vs. bzip2 , 26 sierpnia 2003
  3. Szybki test porównawczy: Gzip vs. Bzip2 vs. LZMA , 31 maja 2005
nik
źródło
2
Pytający zapytał o najszybszą metodę, bzipowanie smoły 100 Gb zajmie całe życie! Chodzi o to, że miejsce na dysku jest tak tanie, że eony, aby wyeliminować każdą możliwą nadmiarowość, są po prostu bezsensownym marnotrawstwem zasobów, chyba że absolutnie konieczne. Ponieważ większość miejsca na dysku jest zajęta w luźnym miejscu, gzipowanie tar za pomocą -1 prawdopodobnie wykona zadanie wystarczająco dobrze i pozwoli przejść do następnego zadania kilka miesięcy wcześniej!
Andy Lee Robinson
Chociaż zgadzam się, że plik 100 GB prawdopodobnie nie jest wart kompresji w ogóle, nie sądzę, że bzip2 zajmie liniowo więcej czasu na 100 GB w porównaniu do 1 GB (powiedzmy). Chciałbym zobaczyć jakąś teorię lub dane, które pokazują oba sposoby.
nik
Rozumiem, że słownik bzip2 jest adaptacyjny, dlatego ciągle szuka nowych redundancji w swoim oknie wyszukiwania aż do końca pliku. Z zastrzeżeniem jednorodności entropii pliku, powinna być względnie liniowa. Byłby to zły kompresor, który zakładałby, że ma wszystko, czego potrzebował od początku pliku, aby móc szybko skompresować resztę, ale w niektórych przypadkach może to być wszystko, czego potrzeba, chociaż istnieją lepsze sposoby na zestarzenie się niż praca empirycznie z zestawami danych 100 GB!
Andy Lee Robinson
7

Ten facet przeprowadził kilka badań na ten temat. Wygląda na to, że .zip szybciej kompresuje większe pliki. Daje to jednak jeden z największych rozmiarów kompresji. Wygląda również na to, że korzystał z narzędzi systemu Windows, ale założę się, że narzędzie OSX jest prawie tak zoptymalizowane.

Oto doskonała strona internetowa, na której liczne narzędzia do kompresji zostały przetestowane pod kątem prędkości w wielu plikach. Istnieje wiele innych testów na tej stronie, na które możesz spojrzeć, aby określić najlepsze narzędzie dla Ciebie.

Duża prędkość ma związek z używanym programem. Użyłem narzędzia 7zip dla Windows i uważam, że jest to bardzo szybkie. Jednak kompresowanie wielu plików zajmuje dużo czasu, bez względu na wszystko, więc zostawiłbym to na noc. Albo możesz po prostu zepsuć całość i nie skompresować jej ... Osobiście nie znoszę rozpakowywania dużych archiwów, więc byłbym ostrożny, jeśli to właśnie chcesz zrobić.

Dennis
źródło
0

Wolę używać

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2

do przenoszenia plików na inny serwer i jednoczesnego ich zakrycia

oussama fahd
źródło
1
Które jest już sugerowane w górnej odpowiedzi przez @nik. Nie trzeba kopiować w celu podkreślenia, po prostu oceń drugą odpowiedź lub dodaj komentarz, jeśli masz coś merytorycznego, ale nie chcesz udzielać zaangażowanej odpowiedzi. ; o)
pbhj