Чому не можна витягнути .zip файли? [зачинено]


28

Я спробував більшість форматів (gzip тощо) витягнути zip-файл tar, і коли я досить розчарувався в Google для цього, я не знайшов способу витягнути zip-файл із tarта лише рекомендаціями щодо використання zipабо unzip. Власне, у моїй системі Linux навіть не є zipутиліта, а лише unzip(що залишає мене цікавити, чому це головний рекомендований варіант). Звичайно, unzipпрацювали, вирішуючи мою проблему, але чому я не можу tarвитягувати поштові файли? Можливо, замість цього я повинен запитати, яка різниця між zip та методами стиснення, що підтримуються tar?


1
Лише примітка, bsdtarможна витягнути .zipархіви: P
HalosGhost

12
Ви хочете сказати, як, наприклад, "чому я не можу використати консервну банку для подрібнення моркви?" Річ у тому, що tar має свій власний формат файлів, а потім стискає його залежно від обраного способу. zip - це зовсім інший звір. Просто як це. Це "unix шлях", мати один невеликий інструмент, який добре виконує одну роботу, а не мати молочну свиноматку для відкладення яєць, яка буде задовольняти всі ваші потреби.
тинк

Я трохи відредагував своє запитання, щоб зробити це більш зрозумілим, але, думаю, моє запитання чітко означало, що я вважаю, що zip - це формат стиснення, а не інструмент заміни для tar + стиснення. Відповідь, яку я обрав, виправила те, що я припускала, і показала, що відповідь не ґрунтувалася на думці.
Плутон

У вас немає zipза замовчуванням, оскільки його ліцензування не сумісне з GPL
venimus

Відповіді:


29

Філософія UNIX - мати невеликі інструменти. Один інструмент робить саме одне, але це особливо добре.

tarІнструмент просто об'єднання декількох файлів в один файл без стиснення.

gzipІнструмент просто стискає один файл.

Якщо ви хочете мати обидва, ви просто комбінуєте обидва інструменти, у результаті чого .tar.gzфайл.


zipІнструмент абсолютно різні речі. Він займає купу файлів і об'єднує їх в один стислий файл. З абсолютно різними алгоритмами.


Якщо ви хочете, щоб одним інструментом керувати ними, користуйтеся atool. Він підтримуватиме цілу купу різних форматів, просто виявляючи формат і викликаючи правильний інструмент.


Дякую, що насправді пояснили мету обох, а не просто пояснювали, що робить дьоготь. Я незабаром зрозумів відповідь, переглянувши статтю у Вікіпедії, в якій перераховані формати для "Архівування", "Стиснення" та обох у трьох різних таблицях. Я подумав, що буду чекати відповіді, яка це чітко пояснила.
Плутон

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

9

Довгий короткий сюжет: інструмент GNU tar не проходить через zip / unzip, оскільки нікого не цікавить.

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

tarспочатку не призначений для розпакування та стискання файлів, а для архівації кількох файлів в одному великому файлі. Оскільки люди не лише хотіли архівувати свої файли, а й стискати їх, тому вони просто tarпередають вихід через будь-який компресор, який приймає введення потоку даних і передає результати у файл. Прибуток!

Тепер, щоб зробити таке завдання максимально безболісним, tarвирішили внутрішньо передавати файли, згенеровані до інструментів стиснення, таких як gzip, lzma тощо, які під час запуску активувалися спеціальними прапорами для кожного формату tar. Ось чому при спробі витягти пошкоджений файл через tarвас відображається основна помилка інструменту, а не tar:

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

Отже, справа не в тому, tarщо не розпаковує поштові файли, просто tarне має можливості передавати її через правильний інструмент, оскільки ніхто реально не намагався її реалізувати, а zip вже виконує функцію архіву файлів файлу tar. у форматі менше підстав для tar, щоб підтримати його.

Тепер є інструменти «все в одному», які стискають / розтискають все, що ви кидаєте на них, знову ж таки, вам потрібно мати правильні інструменти, щоб насправді підтримувати. Якщо у вас їх немає, інструмент вийде з ладу.


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

Я б запропонував згадати декілька існуючих інструментів стиснення "все в одному". Наприклад, є GNOME file-roller...
derobert

@derobert файловий ролик підтримує zip лише у тому випадку, якщо у вас встановлено unzip / zip / p7zip. Інакше так само марно, як дьоготь.
Брайам

tar підтримує лише різні стислі версії, якщо у вас також встановлений відповідний інструмент ... Багатоформатні менеджери архівів корисні, оскільки вони дають вам послідовний інтерфейс для обробки різних архівних форматів.
дероберт

@derobert точно.
Брайам

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.