использовать Archive Utility.app из командной строки (или с applecript) - PullRequest
2 голосов
/ 13 октября 2011

Я хотел бы использовать Archive Utility.app в приложении, которое я пишу, для сжатия одного или нескольких файлов.

Выполнение (из командной строки):

/System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility file_to_zip

Работает, но создает файл cpgz, я мог бы с этим смириться (хотя .zip было бы лучше), но главная проблема в том, что я не могу сжать 2 файла в 1 архив:

/System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility ~/foo/a.txt ~/bar/b.txt

Приведенная выше команда создаст 2 архива (~ / foo / a.txt.cpgz и ~ / bar / b.txt.cpgz).

Я не могу заставить это делать то, что я хочу:

open -a /System/Library/CoreServices/Archive\ Utility.app --args xxxx

Я бы предпочел не использовать команду zip, потому что файлы, которые должны быть сжаты, довольно велики, поэтому было бы неплохо иметь встроенный индикатор выполнения.

Или, могу ли я использовать Archive Utility программно?

Спасибо.

Ответы [ 4 ]

12 голосов
/ 29 февраля 2012

Archive Utility.app использует для создания своих zip-архивов следующее:

ditto -c -k --sequesterRsrc --keepParent Product.app Product.app.zip
3 голосов
/ 20 октября 2011

Archive Utility.app не поддерживает сценарии.

Опция -dd / - display-dots приводит к тому, что утилита командной строки zip отображает точки прогресса при сжатии. Вы можете проанализировать вывод zip для вашего индикатора выполнения. zip также отображает точки, если сканирование и открытие файлов занимает более пяти секунд.

Лучше было бы интегрировать библиотеку сжатия, такую ​​как zlib или libbzip2 . Оба из них позволяют вам сжимать часть данных одновременно. Вам нужно будет обрабатывать обновления индикатора выполнения, которые вы можете выполнять после сжатия каждого блока данных.

1 голос
/ 11 октября 2013

Я использовал Archive Utility для распаковки файлов из Applescripts:

tell application "Archive Utility" to open filePath

Однако, это только говорит, что Archive Utility начинает распаковку. Он завершится в свое время, и appleScript будет продолжать выполняться, не дожидаясь окончания декомпрессии. Утилита архивирования не сообщит яблочному сценарию, когда это будет сделано.

Вы можете использовать приведенную выше строку, если Archive Utility уже запущена. Он добавит новый файл в свою очередь и распакует, когда будет готов.

Кроме того, предпочтения Archive Utility будут определять, как она достигает цели. Например: он может распаковать в другую папку или удалить оригинал. Вы можете запустить его как программу и изменить настройки, если это поможет.

Я не использовал это, чтобы утилита архивирования сжимала файлы.

1 голос
/ 26 октября 2011

Как насчет Automator?Действие «Создать архив» будет работать.

...