Сжатие Mac zip без папки MACOSX?
когда я сжимаю файлы со встроенным zip-компрессором в Mac OSX, это приводит к дополнительной папке под названием "__MACOSX", созданной в извлеченном zip.
могу ли я настроить параметры, чтобы эта папка не создавалась, или мне нужно купить сторонний инструмент сжатия?
обновление: Я только что нашел бесплатное приложение для OSX, которое решает мою проблему:"YemuZip"
обновление 2: YemuZip больше не является бесплатным
13 ответов
когда у меня была эта проблема, я сделал это из командной строки:
zip file.zip uncompressed
редактировать, после многих downvotes: я использовал этот вариант некоторое время назад, и я не знаю, где я его узнал, поэтому я не могу дать вам лучшее объяснение. Крис Джонсон ответ правильно, но я не буду удалять мой. Как говорится в одном комментарии, это более точно, что OP спрашивает, поскольку он сжимает без этих файлов, а не удаляет их из сжатого файла. Я найти его проще тоже помню.
Ok после того, как я остановился на этом, я нашел это решение, из терминала:
zip -r -X Archive.zip *
где-X означает: исключить эти невидимые файлы ресурсов Mac, такие как "_MACOSX" или "._Имя файла и. хранить файлы ДС
эта команда сделала это для меня:
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"
Я использую этот сценарий оболочки Automator, чтобы исправить его после. Он отображается как пункт контекстного меню (щелчок правой кнопкой мыши по любому файлу, отображаемому в Finder).
while read -r p; do
zip -d "$p" __MACOSX/\* || true
zip -d "$p" \*/.DS_Store || true
done
- создать новый сервис с Automator
- Выберите "файлы и папки"в " Finder"
- добавить "действие сценария оболочки"
ненужные папки могут быть удалены следующим образом:
zip -d filename.zip "__MACOSX*"
работает лучше всего для меня
на zip
утилиты командной строки никогда не создает __MACOSX
каталог, поэтому вы можете просто запустить такую команду:
zip directory.zip -x \*.DS_Store -r directory
в выводе ниже,a.zip
который я создал с zip
утилиты командной строки не содержит , а 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-архива с нескольких файлов, как правило, должны быть в одном каталоге, потому что если это не так, некоторые разархивировать утилиты (типа unzip
и 7z
, но не Архив утилита, Unarchiver,unar
или dtrx
) не создавайте содержащий каталог для файлов при извлечении архива, что часто затрудняет поиск файлов, и если одновременно извлекается несколько таких архивов, может быть трудно определить, какие файлы принадлежат к какому архиву.
только утилита архивирования создает __MACOSX
каталог при создании архива, в котором хотя бы один файл содержит метаданные, такие как расширенные атрибуты, флаги файлов или вилка ресурсов. The __MACOSX
каталог содержит AppleDouble файлы, имя файла которых начинается с ._
которые используются для хранения специфичных для OS X метаданных. The zip
утилита командной строки удаляет метаданные, такие как расширенные атрибуты, флаги файлов и вилки ресурсов, что также означает, что метаданные, такие как теги, теряются и что псевдонимы перестают работать, потому что информация в файле псевдонима хранится в вилке ресурсов.
обычно вы можете просто отбросить метаданные OS X, но чтобы увидеть, какие файлы метаданных содержат, вы можете использовать xattr -l
. xattr
также включает вилки ресурсов и флаги файлов, потому что, хотя они фактически не хранятся как расширенные атрибуты, к ним можно получить доступ через интерфейс расширенных атрибутов. Как утилита архивирования, так и zip
утилита командной строки отбрасывает ACLs.
не zip любой скрытый файл:
zip newzipname filename.any -x "\.*"
С этим вопросом, это должно быть так:
zip newzipname filename.any -x "\__MACOSX"
надо сказать, однако, команда zip запускается в терминале, просто сжимая файл, он не сжимает никаких других. Так что сделайте это результат тот же:
zip newzipname filename.any
вы имеете в виду zip
инструмент командной строки или команда сжатия Finder?
на zip
, вы можете попробовать . Если это не делает этого, вы можете попробовать --no-extra
, хотя это, похоже, игнорирует другие метаданные файла, которые могут быть ценными, например uid/gid и file times.
для команды сжатия Finder я не считаю, что есть какие-либо варианты для управления ее поведением. Это для простого дела.
другой инструмент, и, возможно, тот, который Finder фактически использует под капотом, является ditto
. С -c -k
параметры, он создает zip-архивы. С помощью этого инструмента вы можете экспериментировать с --norsrc
, --noextattr
, --noqtn
, --noacl
и/или просто убрать --sequesterRsrc
вариант (который, согласно странице руководства, может нести ответственность за __MACOSX
поддиректорию). Хотя, возможно, отсутствие --sequesterRsrc
просто означает использовать формат AppleDouble, который будет создавать ._ файлы повсюду вместо одного __MACOSX
справочник.
ты не можешь.
но то, что вы можете сделать, это удалить эти нежелательные папки после молнии. Командная строка zip
принимает разные аргументы, где один,-d
, предназначен для удаления содержимого на основе регулярных выражений. Таким образом, вы можете использовать его следующим образом:
zip -d filename.zip __MACOSX/\*
у меня есть лучшее решение после прочтения всех существующих ответов. Все можно сделать с помощью рабочего процесса в один щелчок правой кнопкой мыши. нет дополнительное программное обеспечение,нет сложные материалы командной строки и нет shell трюки.
рабочий процесс automator:
- Input: файлы или папки из любого приложения.
- Шаг 1: Создайте архив, встроенную систему с параметрами по умолчанию.
вот как я избегаю __MACOSX
каталог при сжатии файлов с помощью :
$ cd dir-you-want-to-archive
$ find . | xargs xattr -l # <- list all files with special xattr attributes
...
./conf/clamav: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55
./conf/global: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55
./conf/web_server: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55
Сначала удалите атрибут:
find . | xargs xattr -d com.apple.quarantine
выполнить find . | xargs xattr -l
еще раз убедитесь, что ни один файл не имеет атрибута xattr. тогда вам хорошо идти:
tar cjvf file.tar.bz2 dir
zip -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
-
-x "*/\__MACOSX"
: игнорировать _ _ MACOSX, как вы упомянули. -
-x "*/\.*"
: игнорировать любой скрытый файл, например .DS_Store . - укажите переменную, чтобы избежать файла, если она названа пробелом.
кроме того, вы можете построить службу Automator, чтобы сделать его легко использовать в Finder. Проверьте ссылку ниже, чтобы увидеть детали, если вам нужно.