Objective c 从命令行(或与applescript一起)使用Archive Utility.app

Objective c 从命令行(或与applescript一起)使用Archive Utility.app,objective-c,cocoa,compression,applescript,core-services,Objective C,Cocoa,Compression,Applescript,Core Services,我想在正在编写的应用程序中使用Archive Utility.app压缩一个或多个文件 执行(从命令行): 确实有效,但它会创建一个cpgz文件,我可以接受(尽管.zip会更好),但主要问题是我无法将2个文件压缩到1个存档中: /System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility ~/foo/a.txt ~/bar/b.txt 上面的命令将创建两个归档文件(~/foo/a.txt.cp

我想在正在编写的应用程序中使用Archive Utility.app压缩一个或多个文件

执行(从命令行):

确实有效,但它会创建一个cpgz文件,我可以接受(尽管.zip会更好),但主要问题是我无法将2个文件压缩到1个存档中:

/System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility ~/foo/a.txt ~/bar/b.txt
上面的命令将创建两个归档文件(~/foo/a.txt.cpgz和~/bar/b.txt.cpgz)

我也不能让它做我想做的事情:

open -a /System/Library/CoreServices/Archive\ Utility.app --args xxxx
我不想使用zip命令,因为要压缩的文件相当大,所以内置进度条会很整洁

或者,我可以通过编程方式使用归档实用程序吗


谢谢。

存档实用程序.app无法编写脚本

-dd/--display dots选项将使命令行实用程序在压缩时显示进度点。您可以为进度条解析zip的输出。如果扫描和打开文件的时间超过5秒,zip也会显示点


最好集成一个压缩库,如或。这两种方法都允许您一次压缩一部分数据。您需要处理进度条更新,压缩每个数据块后即可进行更新。

Automator如何?“创建存档”操作将起作用。

Archive Utility.app使用以下方法创建其zip存档:

ditto -c -k --sequesterRsrc --keepParent Product.app Product.app.zip

我已使用Archive Utility从Applescripts解压缩文件:

tell application "Archive Utility" to open filePath
然而,这只告诉存档实用程序开始解压缩。它将在自己的时间内完成,applescript将继续执行,而无需等待解压缩完成。存档实用程序在完成时不会告诉applescript

如果存档实用程序已在运行,则可以使用上述行。它会将新文件添加到队列中,并在准备就绪时解压缩

此外,归档实用程序的首选项将控制它如何实现目标。例如:它可能会解压缩到其他文件夹或删除原始文件夹。您可以将其作为程序运行,如果有帮助,可以更改首选项


我没有用它来获取压缩文件的存档实用程序。

谢谢,我将使用zlib路线。令人沮丧的是,Archive Utility.app无法编写脚本,这也相当令人惊讶……太棒了。在尝试自动执行一个构建过程时,我以前在上下文菜单中手动单击了“压缩”,但遇到了一个问题,
zip
忽略了文件权限,从而使安装程序无效。使用
同上
解决了这个问题:)你知道
存档实用程序.app
是如何处理提取的吗?Commandline
解压
创建一个
\uuMacOS
文件夹。这是互联网上最有价值的评论之一。非常感谢!
zip
命令可将应用程序压缩为2xMB,而
同上
仅压缩9x MB
tell application "Archive Utility" to open filePath