Что является более эффективным - сжатие tar или zip? В чем разница между tar и zip?

69

Я работаю в среде Linux и хочу знать о командах tar и zip.

Что является более эффективным - tar или zip? Мне также нужно знать различия между командами tar и zip. Кто-нибудь может мне их объяснить?

rekha_sri
источник

Ответы:

78

tarтолько делает один файл из нескольких файлов, это не делает сжатие, если не объединить программу сжатия, такую ​​как gzipили bzip2(которую вы можете вызвать изнутри tar, используя опции -zили -j, соответственно). zipобъединяет в одном приложении как архивирование, так и сжатие.

Wim
источник
60

деготь

  • Предполагается, что вы будете читать с одного конца до другого - "Tape ARchive". (Возраст команды показывает ...)
  • Сжатие не выполняется, но вы можете сжать весь результирующий поток, передав его через, например, gzip и bzip2 (выполняется внутренне с помощью -z или -j)
  • Хранит атрибуты файлов unix : uid, gid, permissions (особенно исполняемые). Значение по умолчанию может зависеть от вашего дистрибутива и может быть переключено с параметрами.

застежка-молния

  • Хранит атрибуты MSDOS . (Архив, Только для чтения, Скрытый, Система)
  • Сжимает каждый файл, затем добавляет их в архив
  • Включает таблицу файлов в конце файла
  • и, как результат первых двух, позволяет читать только те части файла, которые вам нужны.

Тот факт, что zip сжимает файлы по отдельности, будет влиять на степень сжатия, особенно для многих небольших похожих файлов.

(По крайней мере, это было точно правильно десять лет назад.)

MaHuJa
источник
22

Tar сохраняет гораздо больше метаданных, чем Zip, посмотрите мое сравнение (оно немного устарело):

введите описание изображения здесь

(Нажмите, чтобы увеличить)

Тар проходит 65% тестов, где Zip только 17%. Я сделал тестовый набор доступным на github под лицензией BSD, чтобы вы могли попробовать сами, если у вас есть Mac. Для Linux там я не уверен, есть ли какие-либо метаданные, поэтому эти тесты могут быть неактуальными.

neoneye
источник
Интересно! +1 за это. Но опять же, это была огромная программа. Вы написали это для других целей? Просто любопытно.
CppLearner
Я написал тесты для файлового менеджера, над которым работал несколько лет назад. Но никогда не выпускал
neoneye
1
В Linux также есть метаданные, поэтому они должны работать.
Zeitue
14

Эффективность может быть измерена различными способами:

  1. Как долго длится процесс?
  2. Насколько велики получающиеся файлы?

Есть и другие вопросы, такие как «Насколько распространены инструменты для работы с полученными архивами?»

Так, например, bzip2создаются файлы меньшего размера, чем gzip, но это может занять значительно больше времени. Кроме того, по моему опыту gzip, универсален для Unix-подобных систем, но bzip2все еще нет (хотя это очень распространено и обычно легко получить).

Телемах
источник
3
7zip ( 7-zip.org ) - еще один хороший вариант для получения отличного сжатия за счет процессорного времени. Менее распространенный, чем bzip2 (не установлен по умолчанию в любом месте, о котором я знаю), но его легко установить в большинстве мест (он есть в стандартных репозиториях для большинства дистрибутивов Linux и есть простой установочный пакет для Windows. Как и tar + gzip, он содержит Окно сжатия для входных файлов позволяет получить еще большую экономию по сравнению с ZIP-архивом при добавлении большого количества небольших файлов
Дэвид Спиллетт
3
Эффективность также может быть измерена тем, насколько хорошо она сохраняет данные, см. Мой ответ на этот вопрос. Tar намного лучше, чем zip, при сохранении данных.
neoneye
1
еще один способ измерения совместимости вне UNIX. Windows прекрасно работает с zip (встроенным в Windows), обычно может легко обрабатывать tar.gz с условно-бесплатным программным обеспечением, но bzip2 редко можно найти. К сожалению, в «Первоначальном вопросе» не упоминались эти критерии, поэтому я не вижу их соответствия.
Богатая гомолка
1
Однажды я сделал тщательный обзор степени сжатия в зависимости от времени, требуемого для некоторых распространенных компрессоров, и который был бы наиболее эффективным в зависимости от того, как вы оцениваете пространство по сравнению со временем: blog.grandtrunk.net/2004/07/practical-compressor-test
Wim
9

Как заметил Вим, сам tar не сжимается. Если вы добавляете сжатие tar (например, чтобы получить .tar.gz или .tar.bz2), вы сжимаете весь файл tar одновременно. Напротив, zip сжимает каждый файл в отдельности.

Эффективность зависит от рабочей нагрузки. В частности, zip позволяет получить доступ к отдельным файлам напрямую. С tar вы должны сначала найти ненужные (сжатые) файлы. Производительность сжатия зависит от того, что вы сжимаете. tarс bzip2часто лучше для большого количества похожих файлов (например, исходный каталог). zipмогло бы быть лучше, если бы каждый файл имел очень разный контент.

Мэтью Флэшен
источник
4
... с другой стороны, вам нужно получить весь zip-файл, прежде чем вы сможете получить доступ к содержимому, потому что ток находится в конце. в отличие от этого , вы можете распаковку битуминозных так быстро , как байты прибывают ...
Акира
6

Zip-архивы содержат центральный каталог их содержимого в конце (скорее всего, вам не придется создавать каталог заранее, когда вы еще не знаете, что будет внутри). Это позволяет быстро извлечь отдельные файлы без необходимости распаковывать весь архив: просто прочитайте каталог архива и извлеките только то, что нужно. Однако это требует доступности всего архива и произвольного доступа, который доступен только на блочных устройствах (дискеты, жесткие диски). Кроме того, каталог архива уязвим: если архив по какой-то причине обрезается, для извлечения чего-либо полезного из архива требуется сложное волшебство .

Zip-архивы были созданы для использования BBS, где было важно иметь возможность объединить содержимое каталога в один (и сжатый) файл - вместо того, чтобы загружать, возможно, тысячи отдельных файлов. Как и большинство веб-сайтов, даже сегодня они загружают свои файлы по тем же причинам.

Tar архивы были разработаны для объединения резервных копий, которые будут использоваться для ленточных накопителей, следовательно, для последовательного доступа . Там нет центрального каталога; вместо этого архив содержит блоки заголовка через равные промежутки времени, которые указывают, какие файлы будут следовать в следующих нескольких блоках. Архив Tar предназначен для чтения одним махом; если нужно извлечь только один файл, архив читается последовательно, начиная с самого начала до тех пор, пока не будет найден запрошенный файл (который также может быть в самом конце). Сжатие применяется поверх этого; каждый из различных программ сжатия, которые применяются к битуминозным архивам ( compress, gzip,bzip2и т.д.) являются потоковыми компрессорами и ни в коем случае не изменяют последовательную природу архива. В худшем случае вам понадобится немного больше блоков, чтобы начать извлечение.

Это может звучать как банальное различие, но на самом деле представляет собой противоположность философии. При использовании zip-архивов всегда требуется иметь под рукой весь файл, чтобы делать с ним что-нибудь полезное, тогда как архив tar может быть передан в конвейер. Я могу скачать большой архив tar и начать извлекать его с самого начала, как только появятся первые несколько блоков (и, возможно, прервать загрузку, как только я получу искомый файл). Для Zip-архива мне нужно подождать, пока не появится каталог архива, который находится в самом конце архива. Но как только у меня будет весь файл под рукой, извлечение частичного содержимого из него будет намного быстрее из файла tar.

Оба формата имеют одну сильную сторону, в зависимости от того, где и как они используются. Поскольку конвейеры (и, следовательно, понятие потоковой передачи данных от одного процесса к другому) реально существуют только в мире Unix, главное преимущество архивов tar теряется в других системах, поэтому архивы Zip там гораздо более популярны. Но архивы tar более гибкие, поэтому я предпочитаю их всякий раз, когда у меня есть выбор.

Вукар Тимнаракрул
источник
5

Как уже говорилось, tar создает большой «блок» из всех файлов, которые могут быть сжаты с помощью потокового редактора, такого как gzip или bzip2.

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

Преимущество этого состоит в том, что степень сжатия обычно выше, особенно когда сжатые файлы очень похожи.

Другие упаковщики, такие как «rar», имеют «блочный режим» (или аналогичный), чтобы иметь такой же эффект.

IanH
источник