Сжатие Mac zip без папки MACOSX?



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



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



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



обновление 2: YemuZip больше не является бесплатным

1404   13  

13 ответов:

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

zip file.zip uncompressed

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

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

ОК после того, как остановился на этом сам нашел это решение, из терминала:

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
  1. создать новый сервис с Automator
  2. Выберите "файлы и папки"в " Finder"
  3. добавить "Shell Script Action"

automator shell script

contextual menu item in Finder

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

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. Проверьте ссылку ниже, чтобы увидеть детали, если вам нужно.

Github

Comments

    Ничего не найдено.