Сжатие Mac zip без папки MACOSX?
когда я сжимаю файлы с помощью встроенного zip-компрессора в Mac OSX, это приводит к дополнительной папке под названием "__MACOSX", созданной в извлеченном zip.
могу ли я настроить свои настройки, чтобы эта папка не создавалась, или мне нужно приобрести сторонний инструмент сжатия?
обновление: Я только что нашел бесплатное приложение для OSX, которое решает мою проблему:"YemuZip"
обновление 2: YemuZip больше не является бесплатным
13 ответов:
когда у меня была эта проблема, я сделал это из командной строки:
zip file.zip uncompressedEDIT, после многих downvotes: я использовал эту опцию некоторое время назад, и я не знаю, где я ее узнал, поэтому я не могу дать вам лучшего объяснения. Крис Джонсон ответ правильно, но я не буду удалять мой. Как говорится в одном комментарии, это более точно для того, что просит OP, поскольку он сжимает без этих файлов, а не удаляет их из сжатого файла. Я найти его легче запомнить, тоже.
ОК после того, как остановился на этом сам нашел это решение, из терминала:
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"
- добавить "Shell Script Action"
ненужные папки могут быть удалены следующим образом:
zip -d filename.zip "__MACOSX*"лучше всего работает для меня
The
zipутилиты командной строки никогда не создает , Так что вы можете просто запустить команду: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каталог при создании архива, в котором хотя бы один файл содержит метаданные, такие как расширенные атрибуты, флаги файлов или вилка ресурсов. Элемент__MACOSXкаталог содержит файлы AppleDouble, имя которых начинается с._которые используются для хранения метаданных, специфичных для OS X. Элементzipутилита командной строки удаляет метаданные, такие как расширенные атрибуты, флаги файлов и вилки ресурсов, что также означает, что метаданные, такие как теги, теряются и что псевдонимы перестают работать, потому что информация в файле псевдонима хранится в вилке ресурсов.обычно вы можете просто отбросить метаданные OS X, но чтобы увидеть, какие файлы метаданных содержат, вы можете использовать
xattr -l.xattrтакже включает в себя вилки ресурсов и флаги файлов, потому что, хотя они фактически не хранятся как расширенные атрибуты, к ним можно получить доступ через интерфейс расширенных атрибутов. Как архивная утилита, так иzipутилита командной строки отбрасывает ACL.
не архивируйте любой скрытый файл:
zip newzipname filename.any -x "\.*"С этим вопросом, это должно быть так:
zip newzipname filename.any -x "\__MACOSX"надо сказать, однако, команда zip выполняется в терминале просто сжимая файл, он не сжимает никаких других. Так что сделайте это результат тот же:
zip newzipname filename.any
вы имеете в виду
zipинструмент командной строки или команда сжатия Finder?на
zip, вы можете попробовать . Если это не поможет, вы можете попробовать--no-extra, хотя это, похоже, игнорирует другие метаданные файлов, которые могут быть ценными, например, uid/gid и время файла.для команды сжатия Finder я не считаю, что есть какие-либо варианты управления ее поведением. Это для простого случая.
другой инструмент, и, возможно, тот, который Искатель фактически использует под капотом, является
ditto. С помощью-c -kпараметры, он создает zip-архивы. С помощью этого инструмента вы можете экспериментировать с--norsrc,--noextattr,--noqtn,--noaclи/или просто убрать--sequesterRsrcопция (которая, согласно справочной странице, может отвечать за__MACOSXподдиректорию). Хотя, возможно, отсутствие--sequesterRsrcпросто означает использовать AppleDouble формат, который будет создавать ._ файлы повсюду вместо одного__MACOSXсправочник.
ты не можешь.
но что вы можете сделать, это удалить ненужные папки после архивации. Командная строка
zipпринимает различные аргументы, где один,-d, предназначен для удаления содержимого на основе регулярных выражений. Так что вы можете использовать его следующим образом:zip -d filename.zip __MACOSX/\*
у меня есть лучшее решение после прочтения всех существующих ответов. Все может быть сделано с помощью рабочего процесса в один щелчок правой кнопкой мыши. нет дополнительное программное обеспечение,нет сложные материалы командной строки и нет shell трюки.
рабочий процесс автомата:
- вход: файлы или папки из любого приложения.
- Шаг 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. Проверьте ссылку ниже, чтобы увидеть детали, если вам нужно.


Comments