Почему tar не может извлечь файлы .zip? [закрыто]


28

Я пытался извлечь из большинства zip-файлов большинство форматов (gzip и т. Д.) tar, И когда я достаточно расстроился из-за этого в Google, я не нашел способа извлечь zip-файл tarи использовал только рекомендации zipили unzip. На самом деле, моя система Linux даже не имеет zipутилиты, а только unzip(оставляя меня удивляться, почему это основной рекомендуемый вариант). Конечно, unzipсработало, решив мою проблему, но почему нельзя tarизвлечь zip-файлы? Возможно, я должен вместо этого спросить, в чем разница между zip и поддерживаемыми методами сжатия tar?


1
Просто заметка, bsdtarможно распаковывать .zipархивы: P
HalosGhost

12
Ты имеешь в виду, например, "почему я не могу использовать консервный нож, чтобы нарезать морковь?" Дело в том, что tar имеет свой собственный формат файла, а затем сжимает его любым выбранным вами методом. Зип - это совсем другой зверь. Просто как тот. Это «способ Unix», иметь один небольшой инструмент, который хорошо справляется с одной задачей, вместо того, чтобы иметь яйцекладку, несущую шерсть, которая будет отвечать всем вашим потребностям.
Тинк

Я немного отредактировал свой вопрос, чтобы сделать это более понятным, но я думаю, что мой вопрос явно подразумевал, что я думал, что zip - это формат сжатия, а не инструмент для замены tar + сжатия. Ответ, который я выбрал, исправил то, что я предполагал, и показал, что ответ не был основан на мнении.
Плутон

У вас нет zipпо умолчанию, потому что его лицензирование не совместимо с GPL
venimus

Ответы:


29

Философия UNIX - иметь маленькие инструменты. Один инструмент делает только одну вещь, но это особенно хорошо.

tarИнструмент просто объединение нескольких файлов в один файл без сжатия.

gzipИнструмент просто сжимает один файл.

Если вы хотите иметь оба, вы просто объединяете оба инструмента в .tar.gzфайл.


zipИнструмент совершенно разные вещи. Он берет кучу файлов и объединяет их в один сжатый файл. С совершенно разными алгоритмами.


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


Спасибо за то, что вы на самом деле объяснили цель обоих, а не просто объяснили, что делает tar. Вскоре я разобрался с ответом после просмотра статьи в Википедии, в которой перечислены форматы «Архивация», «Сжатие» и оба в трех разных таблицах. Я подумал, что подожду ответа, который объяснит это ясно.
Плутон

Чтобы быть немного придирчивым, gzipалгоритм сжатия тот же самый, который используется zip. Разница в том, что gzipон предназначен для сжатия любого потока байтов, включая .tarфайл, в то время как zip, полученный и вдохновленный PKZIP, сжимает и архивирует за один шаг (и в таком порядке).
Джо Сьюэлл

9

Короче говоря: инструмент tar GNU не передает через zip / unzip, так как никому нет до этого дела.

Длинная история, оригинальный размер:

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

Теперь, чтобы сделать такую ​​задачу максимально безболезненной, tarрешил внутренне передать файлы, сгенерированные инструментам сжатия, таким как gzip, lzma и т. Д., Которые были активированы специальными флагами для каждого формата во время работы tar. Вот почему, когда вы пытаетесь извлечь поврежденный файл, tarвы видите ошибку инструмента, а не tars:

$ tar zxf damaged.tar.gz
gzip: damaged.tar.gz: unexpected end of file

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

Теперь есть все-в-одном инструменты, которые сжимают / распаковывают все, что вы на них бросаете, опять же, вам нужны правильные инструменты, чтобы реально поддерживать это. Если у вас их нет, инструмент потерпит неудачу.


1
Ну, кроме того, что никто не реализует правильный инструмент для передачи, нет и одного: tar-файлы объединяют только несколько файлов в один. Сжатие является отдельным. Таким образом, фильтры tar-труб просто сжимают / распаковывают один tar-файл. Zip работает по-разному; он использует один интегрированный инструмент для сжатия и объединения (аналогична программа Unix afio).
Дероберт

Я бы предложил упомянуть несколько существующих инструментов сжатия «все в одном». Например, есть GNOME file-roller...
Дероберт

@derobert file-roller поддерживает только zip, если у вас установлен unzip / zip / p7zip. Иначе так же бесполезно, как смола.
Брайам

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

точно @одроберт.
Брайам

3

tarФайл представляет собой формат файла сам по себе предназначен для ленточных архивов. Этот формат затем может быть сжат с использованием (например) gzipили bzip2форматов сжатия. Когда вы извлекаете сжатый tar-файл, вы фактически распаковываете его, а затем извлекаете исходные файлы из несжатого tarфайла.

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

Вы также можете сжимать файлы, используя gzipили bzip2сами, как вы можете создавать zipфайлы (без tarучастия). Когда вы распаковываете эти файлы, вы используете gunzipили bunzip2нет tar.


1

Поскольку ответ «Некоторые вещи есть, и мы должны их принять» тоже не устраивает меня, я просто немного покопался (всегда хорошо узнать что-то новое, не так ли?).

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

Вместо того, чтобы перефразировать то, что я нашел, и сделать излишне мутные воды (запутывание меня бесит), взгляните на эту статью: http://www.differencebetween.net/technology/difference-between-zip-and-gzip/

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.