Ответы:
деготь
застежка-молния
Тот факт, что zip сжимает файлы по отдельности, будет влиять на степень сжатия, особенно для многих небольших похожих файлов.
(По крайней мере, это было точно правильно десять лет назад.)
Tar сохраняет гораздо больше метаданных, чем Zip, посмотрите мое сравнение (оно немного устарело):
(Нажмите, чтобы увеличить)
Тар проходит 65% тестов, где Zip только 17%. Я сделал тестовый набор доступным на github под лицензией BSD, чтобы вы могли попробовать сами, если у вас есть Mac. Для Linux там я не уверен, есть ли какие-либо метаданные, поэтому эти тесты могут быть неактуальными.
Эффективность может быть измерена различными способами:
Есть и другие вопросы, такие как «Насколько распространены инструменты для работы с полученными архивами?»
Так, например, bzip2
создаются файлы меньшего размера, чем gzip
, но это может занять значительно больше времени. Кроме того, по моему опыту gzip
, универсален для Unix-подобных систем, но bzip2
все еще нет (хотя это очень распространено и обычно легко получить).
Как заметил Вим, сам tar не сжимается. Если вы добавляете сжатие tar (например, чтобы получить .tar.gz или .tar.bz2), вы сжимаете весь файл tar одновременно. Напротив, zip сжимает каждый файл в отдельности.
Эффективность зависит от рабочей нагрузки. В частности, zip позволяет получить доступ к отдельным файлам напрямую. С tar вы должны сначала найти ненужные (сжатые) файлы. Производительность сжатия зависит от того, что вы сжимаете. tar
с bzip2
часто лучше для большого количества похожих файлов (например, исходный каталог). zip
могло бы быть лучше, если бы каждый файл имел очень разный контент.
Zip-архивы содержат центральный каталог их содержимого в конце (скорее всего, вам не придется создавать каталог заранее, когда вы еще не знаете, что будет внутри). Это позволяет быстро извлечь отдельные файлы без необходимости распаковывать весь архив: просто прочитайте каталог архива и извлеките только то, что нужно. Однако это требует доступности всего архива и произвольного доступа, который доступен только на блочных устройствах (дискеты, жесткие диски). Кроме того, каталог архива уязвим: если архив по какой-то причине обрезается, для извлечения чего-либо полезного из архива требуется сложное волшебство .
Zip-архивы были созданы для использования BBS, где было важно иметь возможность объединить содержимое каталога в один (и сжатый) файл - вместо того, чтобы загружать, возможно, тысячи отдельных файлов. Как и большинство веб-сайтов, даже сегодня они загружают свои файлы по тем же причинам.
Tar архивы были разработаны для объединения резервных копий, которые будут использоваться для ленточных накопителей, следовательно, для последовательного доступа . Там нет центрального каталога; вместо этого архив содержит блоки заголовка через равные промежутки времени, которые указывают, какие файлы будут следовать в следующих нескольких блоках. Архив Tar предназначен для чтения одним махом; если нужно извлечь только один файл, архив читается последовательно, начиная с самого начала до тех пор, пока не будет найден запрошенный файл (который также может быть в самом конце). Сжатие применяется поверх этого; каждый из различных программ сжатия, которые применяются к битуминозным архивам ( compress
, gzip
,bzip2
и т.д.) являются потоковыми компрессорами и ни в коем случае не изменяют последовательную природу архива. В худшем случае вам понадобится немного больше блоков, чтобы начать извлечение.
Это может звучать как банальное различие, но на самом деле представляет собой противоположность философии. При использовании zip-архивов всегда требуется иметь под рукой весь файл, чтобы делать с ним что-нибудь полезное, тогда как архив tar может быть передан в конвейер. Я могу скачать большой архив tar и начать извлекать его с самого начала, как только появятся первые несколько блоков (и, возможно, прервать загрузку, как только я получу искомый файл). Для Zip-архива мне нужно подождать, пока не появится каталог архива, который находится в самом конце архива. Но как только у меня будет весь файл под рукой, извлечение частичного содержимого из него будет намного быстрее из файла tar.
Оба формата имеют одну сильную сторону, в зависимости от того, где и как они используются. Поскольку конвейеры (и, следовательно, понятие потоковой передачи данных от одного процесса к другому) реально существуют только в мире Unix, главное преимущество архивов tar теряется в других системах, поэтому архивы Zip там гораздо более популярны. Но архивы tar более гибкие, поэтому я предпочитаю их всякий раз, когда у меня есть выбор.
Как уже говорилось, tar создает большой «блок» из всех файлов, которые могут быть сжаты с помощью потокового редактора, такого как gzip или bzip2.
Недостатком этого является то, что вам нужно распаковать весь файл, чтобы получить доступ к одному файлу внутри архива.
Преимущество этого состоит в том, что степень сжатия обычно выше, особенно когда сжатые файлы очень похожи.
Другие упаковщики, такие как «rar», имеют «блочный режим» (или аналогичный), чтобы иметь такой же эффект.