Najlepsza metoda kompresji?

53

Chcę skompresować folder 16 GB, ale jaka jest najlepsza metoda? tar.gz? tar.bz2 rar? 7z? Czy archiwum byłoby mniejsze, gdybym najpierw skompresował w metodzie, a następnie skopiował skompresowane archiwum do nowego folderu, a następnie ponownie skompresował w innej metodzie? Muszę dopasować go do DVD (wyjście może 8,5 GB, nie pamiętam), ale umieszczenie „4370 MB” powoduje, że skompresowany plik będzie częścią 2,5 GB.

BTW, jaka jest domyślna metoda kompresji w Ubuntu?

Amanda
źródło

Odpowiedzi:

70

Domyślnie jest to gz. Jednak najlepsze wyniki, jakie otrzymuję 7z.

Oto wyniki dla kontenera virtualbox 1,4 Gb:

wprowadź opis zdjęcia tutaj

Najlepsza kompresja - rozmiar w MB:

7z 493
rar 523
bz2 592
lzh 607
gz 614
Z 614
zamek 614
.arj 615
lzo 737
zoo 890

Źródło

wprowadź opis zdjęcia tutaj

zainstalować

 sudo apt-get install p7zip-full
Rinzwind
źródło
Dzięki, już zainstalowałem 7z i rar przez Software Center. Spróbuję z 7z.
Amanda,
1
Skąd pochodzą te wyniki? Dla każdego algorytmu współczynnik kompresji i szybkość zależą bardzo od tego, co próbujesz skompresować. Spróbuj skompresować niektóre dane pochodzące z /dev/urandom: za każdym razem uzyskasz inne wyniki. Lub spróbuj /dev/zero: bzip2 jest zwycięzcą (dla stosunku).
Andrea Corbellini,
1
@AndreaCorbellini link znajduje się w odpowiedzi, więc kliknij go !? i tak jak powiedziałem: jest oparty na kontenerze wirtualnym 1.4. Zgadzam się, że kompresja zależy w dużej mierze od tego, jakie to pliki, ale z kilku lat doświadczenia 7z wydaje się być lepszy dla plików, które zwykle mam (głównie oprogramowanie i pliki danych binarnych)
Rinzwind
1
@Rinzwind: Naprawdę przepraszam, nie widziałem linku do źródła .
Andrea Corbellini,
1
@AndreaCorbellini jest w porządku;) miejmy nadzieję, że Amanda poinformuje o wynikach: +
Rinzwind
14

To pytanie jest bardzo stare, ale być może ktoś uzna to rozwiązanie za przydatne:

Użyj rzippo tar. Najpierw kompresuje 900 MB dużych bloków danych przy użyciu metody słownikowej, a następnie przekazuje oczyszczone dane bzip2. Jest znacznie szybszy niż inne narzędzia do silnej kompresji ( bzip2, lzma), a niektóre pliki kompresuje nawet lepiej niż bzip2lub lzma.

Tak, gzjest domyślnym narzędziem do kompresji w systemie Linux. Jest szybki i pomimo swojego wieku daje wciąż bardzo dobre wyniki w kompresji plików tekstowych takich jak kod źródłowy. Innym standardowym narzędziem jest bzip2, choć jest znacznie wolniejsze.

Dodatek: lrzip jest nowszy i rozszerza zasadę rzip. Obsługuje nawet nieograniczone rozmiary bloków i wybór metod kompresji (LZMA, Bzip2, Gzip, LZO, ZPAQ lub none). LZMA jest standardem. W przypadku tworzenia kopii zapasowych lub udostępniania wielu danych innym użytkownikom systemu Linux / BSD może się przydać.

użytkownik258532
źródło
Myślę, że miałeś na myśli bloki 900 kB? 900 MB byłoby nieco duże ...
Byte Commander
1
To właściwie 900 MB. Zobacz en.wikipedia.org/wiki/Rzip
user258532
2

Wybieram LZMA. Ma najmniejszy bajt narzutu i ma silny współczynnik kompresji. Porównanie ZIP i LZMA: Wygenerowałem dwa pliki seq.txtz kodem PHP

$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[$i%10].($i%10==9 ? "\n":""); file_put_contents('seq.txt', $str);

który zawiera powtarzające się bloki 0..9 cyfr ~ 1 Mb danych i rnd.txtkodem PHP

$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[rand(0,9)].($i%10==9 ? "\n":""); file_put_contents('rnd.txt', $str);

który przechowuje losowe bloki 0..9 cyfr ~ 1 Mb danych.

Wyniki kompresji:

  • seq.txt, rnd.txt - 1100000 bajtów
  • seq.txt.zip - 2502 bajtów
  • rnd.txt.zip - 515957 bajtów
  • seq.txt.lzma - 257 bajtów
  • rnd.txt.lzma - 484939 bajtów

Stopień sprężania:

  • ZIP -> „seq.txt” -> 99,772%
  • ZIP -> „rnd.txt” -> 53.094%
  • LZMA -> „seq.txt” -> 99,976%
  • LZMA -> „rnd.txt” -> 55,914%

Tak więc LZMA skompresował dane sekwencyjne o 0,2% skuteczniej niż ZIP,
a dane losowe o 2,8% skuteczniej niż ZIP.

Na pewno LZMA wygrywa!

Agnius Vasiliauskas
źródło