Подтвердить что ты не робот

Mac zip сжимает без папки __MACOSX?

Когда я сжимаю файлы со встроенным zip-компрессором в Mac OSX, это приводит к созданию дополнительной папки под названием "__MACOSX", созданной в извлеченном zip файле.

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

UPDATE. Я просто нашел бесплатное приложение для OSX, которое решает мою проблему: " YemuZip"

4b9b3361

Ответ 1

Когда у меня была эта проблема, я сделал это из командной строки:

zip file.zip uncompressed

EDIT, после многих downvotes: я использовал эту опцию некоторое время назад, и я не знаю, где я ее узнал, поэтому я не могу дать вам лучшего объяснения. Крис Джонсон ответ правильный, но я не удалю свое. Как говорится в одном из комментариев, он более точен, о чем спрашивает OP, поскольку он сжимает без этих файлов, вместо того, чтобы удалять их из сжатого файла. Мне также легче запомнить.

Ответ 2

Может быть исправлено после факта на zip -d filename.zip __MACOSX/\*

Ответ 3

Хорошо, после того, как я сам нашел это решение, от терминала:

zip -r -X Archive.zip *

Где -X означает: Исключить эти невидимые файлы ресурсов Mac, такие как "_MACOSX" или "._Filename" и .ds хранить файлы

источник

Ответ 4

Эта команда сделала это для меня:

zip -r Target.zip Source -x "*.DS_Store"

Target.zip - это создаваемый zip файл. Source - это исходный файл/папка для zip-up. Параметр _x указывает файл/папку, которые не следует включать. Если вышеуказанное не работает по какой-либо причине, попробуйте это вместо:

zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX"

Ответ 5

Я использую эту оболочку Automator Script для ее исправления. Он отображается как контекстный пункт меню (щелчок правой кнопкой мыши по любому файлу, отображаемому в Finder).

while read -r p; do
  zip -d "$p" __MACOSX/\*
  zip -d "$p" \*/.DS_Store
done
  • Создать новую службу с помощью Automator
  • Выберите "Файлы и папки" в "Finder"
  • Добавить "Shell Script Действие"

оболочка automator  script

контекстный пункт меню в Finder

Ответ 6

Нежелательные папки также можно удалить следующим образом:

zip -d filename.zip "__MACOSX*"

Работает лучше всего для меня

Ответ 7

Утилита командной строки zip никогда не создает каталог __MACOSX, поэтому вы можете просто запустить команду следующим образом:

zip directory.zip -x \*.DS_Store -r directory

В приведенном ниже примере a.zip, который я создал с помощью утилиты командной строки zip, не содержит директорию __MACOSX, но a 2.zip, которую я создал из Finder.

$ touch a
$ xattr -w somekey somevalue a
$ zip a.zip a
  adding: a (stored 0%)
$ unzip -l a.zip
Archive:  a.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
 --------                   -------
        0                   1 file
$ unzip -l a\ 2.zip # I created `a 2.zip` from Finder before this
Archive:  a 2.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
        0  01-02-16 20:31   __MACOSX/
      149  01-02-16 20:29   __MACOSX/._a
 --------                   -------
      149                   3 files

-x .DS_Store не исключает файлы .DS_Store внутри каталогов, но -x \*.DS_Store делает.

Файл верхнего уровня zip-архива с несколькими файлами обычно должен быть одним каталогом, потому что, если это не так, некоторые утилиты unarchive (например, unzip и 7z), но не архивная утилита, Unarchiver, unar, или dtrx) не создают каталог для файлов, когда архив извлекается, что часто затрудняет поиск файлов, и если одновременно извлекается несколько архивов, это может быть сложно сказать какие файлы принадлежат к тому архиву.

Утилита Archive создает только каталог __MACOSX при создании архива, где хотя бы один файл содержит метаданные, такие как расширенные атрибуты, флаги файлов или ресурс. Каталог __MACOSX содержит файлы AppleDouble, имя файла которых начинается с ._, которые используются для хранения метаданных, специфичных для OS X. Утилита командной строки zip отбрасывает метаданные, такие как расширенные атрибуты, флаги файлов и вилки ресурсов, что также означает, что метаданные, такие как теги, теряются и эти псевдонимы перестают работать, поскольку информация в файле псевдонима хранится в ресурсе вилка.

Обычно вы можете просто отказаться от метаданных, специфичных для OS X, но чтобы посмотреть, какие файлы метаданных содержат, вы можете использовать xattr -l. xattr также включает в себя вилки ресурсов и флаги файлов, поскольку, хотя они фактически не хранятся как расширенные атрибуты, к ним можно получить доступ через интерфейс расширенных атрибутов. Как утилита архива, так и утилита командной строки zip отбрасывают списки ACL.

Ответ 8

Вы имеете в виду инструмент командной строки zip или команду Finder Compress?

Для zip вы можете попробовать опцию --data-fork. Если это не так, вы можете попробовать --no-extra, хотя это, похоже, игнорирует другие метаданные файлов, которые могут быть ценными, например uid/gid и время файла.

Для команды Finder Compress я не верю, что есть какие-то возможности для контроля ее поведения. Это для простого случая.

Другой инструмент, и, возможно, тот, который использует Finder под капотом, ditto. С параметрами -c -k он создает zip-архивы. С помощью этого инструмента вы можете поэкспериментировать с --norsrc, --noextattr, --noqtn, --noacl и/или просто оставить параметр --sequesterRsrc (который, согласно man-странице, может отвечать за __MACOSX). Хотя, возможно, отсутствие --sequesterRsrc просто означает использовать формат AppleDouble, который будет создавать файлы._ по всему месту вместо одного каталога __MACOSX.

Ответ 9

не зашифровывать скрытый файл:

zip newzipname filename.any  -x "\.*"

с этим вопросом, он должен выглядеть следующим образом:

zip newzipname filename.any  -x "\__MACOSX"

Надо сказать, что zip-команда запускается в терминале, просто сжимая файл, он не сжимает других. Таким образом, результат будет таким же:

zip newzipname filename.any

Ответ 10

Вы не можете.

Но что вы можете сделать, это удалить эти нежелательные папки после zipping. Командная строка zip принимает разные аргументы, где один, -d, предназначен для удаления содержимого на основе регулярного выражения. Поэтому вы можете использовать его следующим образом:

zip -d filename.zip __MACOSX/\*