Как я могу оценить лучший выбор формата архива для сжатия файлов?

24

В общем, я заметил следующее:

  • Файлы или инструменты Linux-y используют bzip2 или gzip для распространения архивов
  • Windows-ы файлы или инструменты используют ZIP для распространения архивов
  • Многие люди используют 7-Zip для создания и распространения своих собственных архивов.

Вопросов:

  • Каковы преимущества и недостатки этих форматов, которые кажутся открытыми? Когда / почему я должен выбрать один (скажем, 7-Zip) вместо другого (скажем, ZIP)?
  • Почему вышеприведенная тенденция сохраняется, хотя все это портативные форматы? Есть ли какие-то конкретные преимущества использования определенного формата архива на конкретной платформе?
Mehrdad
источник
1
Смотрите также: stackoverflow.com/questions/2397474/…
Томас Бонини
@Sathya, @Andreas: Спасибо за ссылки, они полезны и отвечают на части моего вопроса. :)
Мердад
1
Сжатие - это довольно сложная область, и ни один алгоритм не может дать оптимальных результатов для всего - кроме того, это проблема, на которую вы можете бросить ресурсы и получить лучшие результаты, но также и та, которая может быть выполнена почти так же быстро и за гораздо меньшее время. Некоторые алгоритмы нацелены на то, чтобы быть быстрыми и легкими в памяти, некоторые нацелены на создание наименьшего возможного файла независимо от того, сколько времени это занимает или нужно ли вам 12 ГБ ОЗУ (не преувеличивая), и так далее.
Фоши
1
@ Фоши, это должен быть ответ.
Ицхак

Ответы:

16

Существует большое разнообразие форматов и методов сжатия, некоторые из них не сжимаются вообще и предназначены для хранения нескольких файлов в одном архиве, а другие более новые экспериментальные компрессоры (на основе PAQ ) предназначены для сжатия настолько агрессивно, насколько это возможно, независимо от времени, которое требуется для выполнения указанной операции.

Вам необходимо оценить функции, которые вам требуются, по вашему выбору метода сжатия, а также рассмотреть контекст, в котором он будет использоваться.

Различные особенности и соображения включают в себя:

  • Способность к сжатию - Достаточно ли значительно сокращает файл?
  • Простота использования - если файл передается другому пользователю, архив будет легко распаковать или потребуется установить больше программного обеспечения?
  • Защита паролем и / или шифрование. Требуются ли эти меры безопасности?
  • Поддержка нескольких томов - если целевой носитель требует, чтобы файл был разбит на соответствующие куски, формат поддерживает это элегантно. Например, 650 МБ на CD.
  • Восстановление и восстановление - если файл становится частично поврежденным, предлагает ли он запись восстановления, чтобы помочь восстановлению данных?
  • Поддержка Unicode - Поддерживает ли архиватор международные имена файлов или только стандартный ASCII?
  • Системные требования. Современные компрессоры, такие как 7-Zip , предлагают возможность повысить эффективность сжатия, используя больший словарь (словарь является ссылкой на часто повторяющиеся данные в сжатом файле), но это, в свою очередь, увеличивает потребление памяти как при сжатии, так и при сжатии. время декомпрессии.
  • Поддержка самораспаковки - можно ли свернуть архив в исполняемый файл, который обеспечивает простоту использования для тех, кто в нем нуждается? (Также имейте в виду, что вы можете создать самораспаковщик только для одной платформы. Вообще говоря, самораспаковщик Windows не будет работать в Linux по умолчанию, если только он не проходит через слой совместимости, такой как Wine).
  • Атрибуты файловой системы - хранит ли компрессор соответствующие метаданные и разрешения файловой системы, которые, возможно, стоит сохранить в момент извлечения?

Вообще говоря, ZIP является наиболее распространенным форматом, но размеры более 4 ГБ, как правило, не поддерживаются (если вообще), поддержка безопасности обычно считается плохой (стандартный пароль может быть скомпрометирован с помощью атаки обычным текстом, и дальнейшее шифрование обычно реализуется как неофициальная производная формата коммерческими поставщиками программного обеспечения ZIP).

Кроме того, большинство других популярных форматов будут иметь некоторую поддержку во всех операционных системах, устанавливая больше программного обеспечения.

Мой личный выбор - 7-Zip , так как он имеет отличное и гибкое сжатие; несмотря на то, что он имеет специфический пользовательский интерфейс в Windows. Существуют декомпрессоры для Linux и Mac OS X (хотя они не основаны на графическом интерфейсе).

Руаири Фуллам
источник
3
Если архив предназначен для распространения, также важно учитывать целевую аудиторию и использовать формат, который по умолчанию поддерживается на их платформе. Доступность может быть более важной, чем другие соображения в этом случае.
хаммар
+1 спасибо за информацию, хотя было бы еще лучше упомянуть, какие форматы поддерживают эти пункты. :)
Мердад
Я был искушен, но есть множество доступных форматов, которые заняли бы много времени, чтобы перечислить. В Википедии есть хорошая матрица форматов сжатия, которая может помочь: en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam
1
История преподает важный урок, когда дело доходит до самораспаковывающихся архивных файлов. Два десятилетия назад были самораспаковывающиеся архивы, в которых люди больше не могут самораспаковываться, потому что их машины не могут запускать программы MS / PC-DOS, или потому, что программы самораспаковывания аварийно завершают работу в результате изменений процессора или из-за Экстракторы жалуются, что диски заполнены, когда они не
загружены,
Этот вопрос, безусловно, является дискуссионным, я не сталкивался с этой конкретной проблемой, но вижу, что она возникает; Я полагаю, что все дело в конечной цели создания архива и ожидаемой продолжительности использования файлов. Конечно, если у вас есть старый архив, который трудно извлечь из эпохи DOS, вы можете использовать DOSBox или даже создать виртуальную машину, если это необходимо.
Руаири Фуллам
8

Одна вещь, которая приходит на ум, - это (двухлетнее) сообщение в блоге от Джеффа Этвуда: Сжатие файлов в эпоху многоядерности . В этой статье он обнаруживает, что bzip2 превосходит 7-zip, когда работает более двух ядер.

matpe
источник
+1 боже мой! Я этого не знал. Степень сжатия, похоже, не стоит того. :)
Mehrdad
2
Этому посту более 2 лет. Разве 7-zip не работает лучше с более чем двумя ядрами?
Cregox
BZIP2 сжимает более эффективно по нескольким ядрам, потому что он сжимается в блоки по 100-900 КБ, поэтому может распределять блоки по отдельным ядрам, но эффективность сжатия теряется, поскольку эти блоки считаются отличными друг от друга.
Руаири Фуллам
4

Для вас первый вопрос, 7-Zip - это архиватор, который может использовать множество алгоритмов для сжатия и распаковки данных.

На ваш второй вопрос, просто убедитесь, что платформа поддерживает инструменты, которые поддерживают данный формат. Например, я бы не использовал RAR на Mac. Хотя его можно использовать и есть бесплатные утилиты, которые его поддерживают, им не хватает гораздо более богатого интерфейса, чем утилиты Windows, которые поддерживают RAR (по моему опыту).

soandos
источник
Принимая во внимание, что я лично ненавижу графические rar-программы и всегда использую командную строку, даже в Windows.
CarlF
4

Как уже упоминали другие, выбор конкретного формата сжатия сильно зависит от использования и целевой аудитории.

  • Архивы .tar.gz и tar.bz2 идеально подходят для использования в системах Linux (и, соответственно, для обмена файлами с пользователями Linux), поскольку инструменты tar, gzip и bzip2 в основном распространены на платформе, а также потому, что формат .tar имеет полный поддержка разрешений Unix и других специфичных для платформы свойств. Выбор между gzip и bzip2 для сжатия архива tar - это, в основном, решение относительно скорости сжатия в сравнении с коэффициентом сжатия, поскольку bzip2 доставляет файлы меньшего размера, но с гораздо меньшей скоростью сжатия. Недостатки этих форматов включают в себя меньшую совместимость с Windows и (потенциальную) необходимость распаковывать весь архив для извлечения одного файла.

  • ZIP-архивы могут быть извлечены на большинстве платформ с использованием встроенных инструментов, поэтому это идеальный выбор для отправки архива нетехническому пользователю, который не хочет устанавливать стороннее программное обеспечение для архивирования, такое как 7-Zip. Уровень сжатия не так хорош, как более продвинутые алгоритмы, и он не поддерживает разрешения Unix, но это отличный формат, если вы хотите, например, отправить архив фотографий с праздников своей бабушке. ZIP также обеспечивает базовую защиту паролем и может быстро извлечь файл из любого места в архиве.

  • 7-Zip хорош, если вы хотите наилучшие из возможных коэффициентов сжатия. Как и ZIP, он не поддерживает права доступа к файлам Unix или права собственности, а также не устанавливается по умолчанию на большинстве платформ, что делает его немного более удобным в использовании, но может оказаться полезным в Windows, если важны коэффициенты сжатия. В полностью Linux-среде было бы лучше использовать инструменты сжатия 'xz' или 'lzma' вместе с tar, которые работают точно так же, как 'gzip' и 'bzip2', но используют более продвинутый алгоритм LZMA, такой как 7 -Zip.


источник
2

В качестве примера я использую упомянутые форматы в следующих случаях:

  • Текстовые файлы (особенно логи): bz2
  • Коллекция файлов для распространения (например, исходный код): gz (tar.gz действительно).
  • Ассорти из файлов: 7zip. Я могу сжать почти все очень эффективным способом. Кроссплатформенное, с открытым исходным кодом, стабильное, легкое шифрование файлов (заголовков и данных), ... Можете ли вы попросить что-нибудь еще? :)

Я вообще избегаю RAR , и всякий раз, когда я получаю RAR-файл от кого-то, кого я знаю, я говорю ему / ей прекратить использование этого формата, поскольку он является проповедническим, и что он, вероятно, использует нелицензионное программное обеспечение (большинство людей загружают пробную версию WinRAR и продолжают использовать это навсегда).

PS: я использую Ubuntu (в основном) и Windows (как с двойной загрузкой, так и с VirtualBox).

glarrain
источник
1

Существует как минимум четыре отдельных задания, которые часто путают друг с другом, потому что популярные инструменты интегрируют их:

  1. Архивирование: возможность объединять несколько файлов (включая метаданные) в один файл, сохраняя как можно больше вещей. В мире Linux / Unix архивирование традиционно выполняется в формате файлов TAR.
  2. Сжатие: способность без потерь минимизировать размер потока двоичных данных. В мире Linux / Unix это традиционно делают GZip и BZip2.
  3. Шифрование: возможность шифрования данных ключами
  4. Контрольная сумма: способность обнаруживать (и, возможно, исправлять) ошибки.

Повсеместное распространение .tar.gz и .tar.bz соответствует философии Unix, заключающейся в том, что небольшие инструменты хорошо выполняют одну работу, а не один инструмент, который делает все. Формат файла TAR не поддерживает сжатие или шифрование, но он может быть сжат любым другим компрессором (включая .tar.zip или .tar.7z). Работа GZip и BZip2 заключается в простом сжатии файлового потока в другой файловый поток. Слой сжатия не должен заботиться о том, как сохранить метаданные, шифрование или контрольную сумму. Однако со временем в tarпрограмме было сделано несколько ярлыков для более удобной работы с компрессором.

В формате файлов zip и 7z эти отдельные задания выполняются одной программой в одном формате суперфайлов.

Почему вышеприведенная тенденция сохраняется, хотя все это портативные форматы? Есть ли какие-то конкретные преимущества использования определенного формата архива на конкретной платформе?

Так как это было сделано, исходные коды программ традиционно распространяются как .tar.gz или .tar.bz2, потому что сохранение прав доступа к файлу, времени модификации и т. Д. Важно для различных инструментов, используемых для программирования (например, make).

Отдельный этап архивирования и сжатия работал очень хорошо в течение многих лет, он имеет явное преимущество, заключающееся в возможности свободно смешивать и сопоставлять архив и сжатие, а его недостаток (двухэтапный процесс сжатия) можно легко обойти, разработав более интеллектуальные инструменты ( большинство современных программ сжатия linux напрямую сжимают в .tar.gz или .tar.bz2, скрывая промежуточный шаг).

Нет веских причин для перехода на другие форматы файлов, более новые компрессоры не имеют значительно лучшей степени сжатия, чтобы оправдать нарушение традиции, и tar может сохранить все достаточно хорошо.

Ли Райан
источник