Лучший метод сжатия?
Я хочу сжать папку размером 16 ГБ, но какой метод лучше? tar.gz? tar.bz2 rar? 7z? Будет ли архив меньше, если я сначала сжимаю в методе, затем копирую сжатый архив в новую папку, затем повторно сжимаю другим способом? Мне нужно сделать так, чтобы он помещался на DVD (выход может быть 8,5 ГБ, не помню), но установка "4370 МБ" делает сжатый файл частью 2,5 ГБ.
Кстати, каков метод сжатия по умолчанию в Ubuntu?
3 ответа
По умолчанию gz
, Лучшие результаты, которые я получаю 7z
хоть.
Вот результаты для контейнера виртуальной коробки 1.4 Гб:
Лучшее сжатие - размер в МБ:
7z 493 рар 523 bz2 592 лж 607 гз 614 Z 614 почтовый индекс 614 .arj 615 Изо 737 зоопарк 890
устанавливать
sudo apt-get install p7zip-full
Этот вопрос очень старый, но, возможно, кто-то найдет это решение полезным:
использование rzip
, после tar
, Сначала он сжимает блоки данных размером 900 МБ с помощью словарного метода, а затем передает очищенные данные в bzip2
, Это намного быстрее, чем другие сильные инструменты сжатия (bzip2
, lzma
), а некоторые файлы сжимает даже лучше, чем bzip2
или же lzma
,
Да, gz
является инструментом сжатия по умолчанию в Linux. Это быстро, и, несмотря на его возраст, он дает очень хорошие результаты в сжатии текстовых файлов, таких как исходный код. Еще один стандартный инструмент bzip2
Хотя это намного медленнее.
Дополнение: lrzip новее и расширяет принцип rzip. Он даже поддерживает неограниченные размеры блоков и выбор методов сжатия (LZMA, Bzip2, Gzip, LZO, ZPAQ или нет). LZMA является стандартом. Для резервного копирования или если вы делитесь большим количеством данных с другими пользователями Linux/BSD, это может пригодиться.
Я выбираю LZMA
, Он имеет наименьший объем байтов и имеет высокую степень сжатия. Сравнение между ZIP и LZMA: я сгенерировал два файла seq.txt
с кодом PHP
$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[$i%10].($i%10==9 ? "\n":""); file_put_contents('seq.txt', $str);
который содержит повторяющиеся блоки из 0,9 цифры ~ 1 МБ данных и rnd.txt
с кодом 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);
который содержит случайные блоки из 0,9 цифры ~ 1 МБ данных.
Результаты сжатия:
- seq.txt, rnd.txt - 1100000 байт
- seq.txt.zip - 2502 байта
- rnd.txt.zip - 515957 байт
- seq.txt.lzma - 257 байт
- rnd.txt.lzma - 484939 байт
Степень сжатия:
- ZIP -> "seq.txt" -> 99,772%
- ZIP -> "rnd.txt" -> 53,094%
- LZMA -> "seq.txt" -> 99,976%
- LZMA -> "rnd.txt" -> 55,914%
Таким образом, LZMA сжала последовательные данные на 0,2% более эффективно, чем ZIP
и случайные данные на 2,8% эффективнее, чем ZIP.
Наверняка LZMA выигрывает!