Когда я сжимаю файлы с помощью встроенного zip-компрессора в Mac OSX, это приводит к созданию дополнительной папки с именем «__MACOSX», созданной в извлеченном zip-файле.
Могу ли я изменить настройки, чтобы эта папка не создавалась, или мне нужно приобрести сторонний инструмент сжатия?
ОБНОВЛЕНИЕ : я только что нашел бесплатное приложение для OSX, которое решает мою проблему: " YemuZip "
UPDATE 2 : YemuZip больше не бесплатная
__MACOSX
,.DS_Store
,._fileName
, и все другие различные экскременты Mac OS падает в своих архивах. «OS» tar OSX делает то же самое - вопиющее игнорирование принципа наименьшего удивления .Ответы:
Когда у меня возникла эта проблема, я сделал это из командной строки:
zip file.zip uncompressed
РЕДАКТИРОВАТЬ , после многих отрицательных голосов: я использовал эту опцию некоторое время назад, и я не знаю, где я узнал, поэтому я не могу дать вам лучшее объяснение. Ответ Криса Джонсона правильный, но я не буду удалять свой. Как говорится в одном комментарии, он более точен в отношении того, что запрашивает OP, поскольку он сжимает без этих файлов, а не удаляет их из сжатого файла. Мне тоже легче запомнить.
источник
zip
помощью стороннего приложения, каталог __MACOSX / никогда не создается.zip -rX file.zip uncompressed_directory
Может быть исправлено после факта
zip -d filename.zip __MACOSX/\*
источник
zip -d filename.zip \*/.DS_Store
find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;
. Подставьте свою отправную точку для~
.cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }
. Использование:cleanzip file.zip
илиcleanzip file.zip MORE_JUNK_FILES
(второй параметр не обязателен)Внутри папки, которую вы хотите сжать, в терминале:
Где -X означает: исключить эти невидимые файлы ресурсов Mac, такие как «_MACOSX» или «._Filename» и файлы .ds store
источник
Примечание. Будет работать только для той папки и последующего дерева папок, в которых вы находитесь, и должен иметь
*
подстановочный знак.источник
-X
не исключает файлы .DS_Store. Причина, по которой это может работать для вашего приложения, заключается в том, что вы используете только архивирование*
, то есть файлы подстановки, которые не начинаются с «.». Попробуйте его в каталоге, содержащем точечный файл, и вы увидите, что он включен.zip -r -X Archive.zip myfolder
в папке все еще приводит к zip-файлу, содержащему файл .DS_Store.Эта команда сделала это для меня:
Target.zip
это почтовый файл для создания.Source
исходный файл / папка для архивирования И_x
параметр указывает файл / папку, чтобы не включать. Если вышеупомянутое не работает по любой причине, попробуйте это вместо этого:источник
zip
Утилита командной строки никогда не создает__MACOSX
каталог, поэтому первый фрагмент делает работу, а-x "__MACOSX"
часть не нужна.Я использую этот скрипт оболочки Automator, чтобы исправить это после. Он отображается как элемент контекстного меню (щелчок правой кнопкой мыши по любому файлу, отображаемому в Finder).
источник
zip -d "$p" __MACOSX/\* || true
в вашем ответе.Нежелательные папки также могут быть удалены следующим образом:
Работает лучше для меня
источник
-x "*/\__MACOSX"
: игнорировать __MACOSX, как вы упоминаете.-x "*/\.*"
: игнорировать любой скрытый файл, например .DS_Store.Кроме того, вы можете создать Automator Service, чтобы его было легко использовать в Finder. Проверьте ссылку ниже, чтобы увидеть детали, если вам нужно.
Github
источник
zip
Утилита командной строки никогда не создает__MACOSX
каталог, так что вы можете просто запустить команду:В выводе ниже,
a.zip
который я создал с помощьюzip
утилиты командной строки, не содержится__MACOSX
каталог, ноa 2.zip
который я создал из Finder.-x .DS_Store
не исключает.DS_Store
файлы внутри каталогов, но-x \*.DS_Store
делает.Файл верхнего уровня zip-архива с несколькими файлами обычно должен быть одним каталогом, потому что если это не так, некоторые утилиты для разархивирования (например,
unzip
7z
утилиты для и , но не утилита архивирования, Unarchiverunar
, илиdtrx
) не создают каталог, содержащий для файлы при извлечении архива, что часто затрудняет поиск файлов, и если несколько подобных архивов извлекаются одновременно, может быть трудно определить, какие файлы принадлежат какому архиву.Утилита архивирования создает
__MACOSX
каталог только при создании архива, в котором хотя бы один файл содержит метаданные, такие как расширенные атрибуты, флаги файлов или ветвь ресурса.__MACOSX
Каталог содержит AppleDouble файлов, имя файла начинается с._
, которые используются для хранения OS X специфичных метаданных. Вzip
утилите командной строка отбрасывает метаданные , такие как расширенные атрибуты, флаги файлов, вилок и ресурсов, что также означает , что метаданные , такие как метка теряется, и что псевдонимы перестать работать, потому что информация в файле псевдонимы хранится в ветви ресурсов.Обычно вы можете просто отбросить специфичные для OS X метаданные, но чтобы увидеть, какие файлы метаданных содержат, вы можете использовать
xattr -l
.xattr
также включает в себя ветки ресурсов и файловые флаги, потому что даже если они на самом деле не хранятся как расширенные атрибуты, к ним можно получить доступ через интерфейс расширенных атрибутов. Утилита архивирования и утилитаzip
командной строки отбрасывают списки ACL.источник
Ты не можешь
Но вы можете удалить ненужные папки после архивирования. Командная строка
zip
принимает разные аргументы, где один-d
, для удаления содержимого на основе регулярного выражения. Так что вы можете использовать это так:источник
не заархивируйте скрытый файл:
с этим вопросом должно быть вроде:
Надо сказать, что команда zip выполняется в терминале, который просто сжимает файл, но не сжимает другие. Так что сделайте это, результат тот же:
источник
__MACOSX
не начинается с.
Вы имеете в виду
zip
инструмент командной строки или команду Finder Compress?Для
zip
, вы можете попробовать--data-fork
вариант. Если этого не произойдет, вы можете попробовать--no-extra
, хотя это, похоже, игнорирует другие метаданные файла, которые могут быть полезны, например, uid / gid и время файла.Для команды Compress в Finder я не верю, что есть какие-либо опции для управления ее поведением. Это для простого случая.
Другой инструмент, и, возможно, тот, который на самом деле использует Finder под капотом
ditto
. С помощью-c -k
опций он создает zip-архивы. С помощью этого инструмента вы можете экспериментировать с--norsrc
,--noextattr
,--noqtn
,--noacl
и / или просто оставьте на--sequesterRsrc
вариант (который, согласно странице человека, может быть ответственным за__MACOSX
подкаталог). Хотя, возможно, отсутствие--sequesterRsrc
просто означает использование формата AppleDouble, который будет создавать файлы ._ повсеместно вместо одного__MACOSX
каталога.источник
У меня есть лучшее решение после прочтения всех существующих ответов. Все может быть сделано с помощью рабочего процесса в один клик правой кнопкой мыши. НИКАКОГО дополнительного программного обеспечения, НИКАКИХ сложных вещей командной строки и НИКАКИХ уловок оболочки.
Рабочий процесс автоматизатора:
Шаг 2: Запустите команду Shell с вводом в качестве параметров. Скопируйте команду ниже.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
Сохраните это, и мы сделали! Просто щелкните правой кнопкой мыши папку или большую часть файлов и выберите рабочий процесс из меню служб. Архив без метаданных будет создан рядом.
источник
Вот как я избегаю
__MACOSX
директории, когда сжимаю файлыtar
командой:$ 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
источник