Mac zip сжимает без папки __MACOSX?
Когда я сжимаю файлы со встроенным zip-компрессором в Mac OSX, это приводит к созданию дополнительной папки под названием "__MACOSX", созданной в извлеченном zip файле.
Могу ли я настроить свои настройки, чтобы эта папка не создавалась или мне нужно приобрести инструмент сжатия сторонних разработчиков?
UPDATE. Я просто нашел бесплатное приложение для OSX, которое решает мою проблему: " YemuZip"
Ответы
Ответ 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/\*