ZIP-файли, створені за допомогою GUI, мають більше байтів, ніж ZIP-файли, створені в оболонці


15

Я створив два ZIP- файли одного і того ж каталогу. Один з графічним інтерфейсом, інший із:

$ zip -r alpha_cmd.zip Alpha

Каталог Alpha становить 33,640 МБ із 164 елементами.

ZIP-файл, створений GUI, на 2100 байт більше, ніж ZIP-файл, створений у командному рядку.

Чому файл ZIP створений за допомогою графічного інтерфейсу?

Примітка . Навіть незважаючи на те, що ZIP-файли мають різний розмір, при розпакуванні каталог кожного має точно таку кількість байтів. В основному, я дуже обережно ставлюсь до можливих невідповідностей, введених керуванням моєю файловою системою з графічним інтерфейсом та командами оболонки.


Один може мати невидимі файли, інший - ні?
Tetsujin

З цієї відповіді SU спробуйтеditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
user151019

@ Марк я забув відповісти. Ця команда "ditto" створює той самий файл, що і Finder. А файли ditto / zip / "Finder ZIP" - це всебічна платформа. Дякую за ваш час та зусилля.
Девід

Відповіді:


20

Перетягуючи з Finder, додається папка __MACOSX, невидима для Macs, яка містить вилки ресурсів OS X, такі як власні піктограми тощо. З Вікіпедії :

Вилка ресурсу - це виделка або розділ файлу в операційній системі Apple Mac OS, який використовується для зберігання структурованих даних разом з неструктурованими даними, що зберігаються в даних fork. Вилка ресурсу зберігає інформацію у певній формі, що містить деталі, такі як растрові значки, форми вікон, визначення меню та їх вміст та код програми (код машини). Наприклад, файл текстової обробки може зберігати його текст у виделці даних, зберігаючи будь-які вбудовані зображення у вилці ресурсу того самого файлу. Вилка ресурсу використовується здебільшого виконуваними файлами, але кожен файл може мати вилку ресурсу.


6
Незначне виправлення: це не лише вилки ресурсів, це всі види метаданих файлів, якими zip-формат не обробляє споконвічно, закодовані у форматі AppleDouble . Вони включатимуть коментарі, теги, прапори Finder, дані карантину тощо, а також вилки ресурсів.
Гордон Девіссон

І мені було цікаво, що таке папка "__MACOSX" у більшості ZIP-зображень ... Тим більше, що ти знаєш, так?
пр.

Ще одна посилання, яка може висвітлити відповідь: stackoverflow.com/questions/107903/…
DA Вінсент

4

Навіть крім основної причини в цьому випадку (Finder додає додаткові приховані речі, як говорить емпедокл), різні розміри ZIP-файлів одних і тих же даних не означають проблеми, коли різниця в розмірах становить частку відсотка.

У різних реалізаціях ZIP може бути різний рівень стиснення за замовчуванням (компроміс між збереженим часом і розміром процесора) або просто мати інший код, який зберігає більше чи менше збігів, економлячи більше або менше байт на рівні стиснення за замовчуванням.

Наприклад, 7-Zip зазвичай створює менші .zipфайли, ніж інші ZIP-програми. (І ні, я не говорю про власний .7zформат файлу. Він також має кращий звичайний ZIP-компресор.)

zipcmp - це програма cmdline , яка може порівнювати ZIP-файли. Він за замовчуванням порівнює лише каталог ZIP, щоб перевірити, чи всі файли мають одне ім’я, розмір та CRC . У цьому випадку обидва ZIP-файли майже напевно містять однаковий вміст, але просто стискаються по-різному (якщо стислий розмір відрізняється.) Доки, звичайно, ZIP-файли не пошкоджені. Використовуйте unzip -t foo.zipдля тестування ZIP-файлу на наявність декомпресійних помилок, невідповідних CRC тощо.


Чи не папки __MACOSX вплинуть на обчислення CRC?
Кент

1
ZIP зберігає в окремій CRC нестиснений вміст кожного стисненого файлу. (Отже, ні з двох причин: каталоги містять лише інші файли, а не власний блок даних. І два, CRC, що зберігаються у метаданих ZIP, є для кожного файлу окремо.) Отже, всі файли, які були однаковими між два ZIP-файли збігалися б у розмірі CRC та були декомпресовані.
Пітер Кордес

@PeterCordes Саме те, що привернуло мою увагу, те, що різні реалізації ZIP можуть створювати різні розміри файлів. Я знав, що оболонка виконується "/ usr / bin / zip". Але оскільки Finder надав мені різний розмір файлу, я подумав, що Finder використовував зовсім інший виконуваний файл (і це мене засмутило). Якби я знав, як користуватися корінням і мав трохи сміливості, я би перейшов "/ usr / bin / zip" до "/ tmp", а потім спробував поштовий індекс Finder (а краще видасть помилку). Але я працюю і не можу ризикувати дестабілізувати свій Mac!
Девід

Найбезпечнішим способом тимчасової заміни /usr/bin/zipбула б інша версія ln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip. Таким чином, у вас завжди є /usr/bin/zip, тому що ви атомним чином замінюєте реалізацію системи. Крім того, стара версія просто перейменована, не перенесена в /tmp(що можливо, є в іншій файловій системі.) Щоб її відключити, я просто перейменував би її в zip.disab, перевірте, чи Finder зламається, а потім перейменуйте її. Але функції бібліотеки створення zip є загальними. Finder майже точно не fork / exec /usr/bin/zip.
Пітер Кордес

@PeterCordes Я розумію про виклик бібліотек замість виконуваного файлу. Але виконуваний файл був би "/ usr / bin / ditto", а не "/ usr / bin / zip". Допомога на цьому форумі чудова. Дякую за ваш час та зусилля.
Девід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.