Используйте Archive Utility.app из командной строки (или с applecript)
Я хочу использовать 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 ответа
Архив Utility.app не является сценарием.
Опция -dd/- display-dots заставит утилиту zip командной строки отображать точки прогресса при сжатии. Вы можете проанализировать вывод zip для вашего индикатора выполнения. zip также отображает точки, если сканирование и открытие файлов занимает более пяти секунд.
Лучше было бы интегрировать библиотеку сжатия, такую как zlib или libbzip2. Оба из них позволяют вам сжимать часть данных одновременно. Вам нужно будет обрабатывать обновления индикатора выполнения, что вы можете делать после сжатия каждого блока данных.
Archive Utility.app использует следующее для создания своих zip-архивов:
ditto -c -k --sequesterRsrc --keepParent Product.app Product.app.zip
Как насчет Automator? Действие "Создать архив" будет работать.
Я использовал Archive Utility для распаковки файлов из Applescripts:
tell application "Archive Utility" to open filePath
Однако это только говорит Archive Utility, чтобы начать распаковку. Он завершится в свое время, и appleScript будет продолжать выполняться, не дожидаясь окончания декомпрессии. Утилита архивирования не сообщит яблочному сценарию, когда это будет сделано.
Вы можете использовать приведенную выше строку, если Archive Utility уже запущена. Он добавит новый файл в свою очередь и распакует, когда будет готов.
Кроме того, предпочтения Archive Utility будут контролировать то, как она достигает цели. Например: он может распаковать в другую папку или удалить оригинал. Вы можете запустить его как программу и изменить настройки, если это поможет.
Я не использовал это, чтобы получить Archive Utility для сжатия файлов.