有没有办法在准备.dmg文件时合并冗余文件?

时间:2012-08-13 18:28:40

标签: macos dmg hardlink

我的公司附带一个包含几个基于Qt的MacOS / X GUI应用程序的软件包;该软件包作为.dmg文件提供,“安装”包括双击.dmg图标,然后将一个或多个应用程序图标拖到他想要保留的位置(例如,到他自己的Applications文件夹)。

这很好,但.dmg文件相当大(例如40 + MB),如果可能的话我想减小它的大小,以减少下载它所需的时间。我注意到的一件事是包中的应用程序都有大量共同的大文件(Qt库,图形资源文件等),而且目前我们在blah中包含了每个文件的单独副本。每个包含的应用程序的app / Contents文件夹 - 可能是这使得.dmg文件如此之大。

所以我的问题是,有没有办法修改.dmg以便它不需要包含这些文件的几个副本,因此不是那么大?理想情况下,我希望这样做而不要求用户运行特殊的安装程序,并且如果用户将它们移动到不同的(或意外的)文件夹,或者删除其中任何一个,都不会导致任何应用程序中断。

这似乎是硬链接的理想应用程序 - 即准备输入到.dmg文件,使一个应用程序包含实际文件,其他应用程序包含这些文件的硬链接,以便在用户从.dmg文件解压缩应用程序之后,文件在逻辑上保持彼此独立(特别是如果用户移动或删除应用程序A,应用程序B将不会停止工作)。但是,对于未命名为Time Machine的应用程序,AFAICT MacOS / X不支持硬链接[edit:to directories]。 :^(

1 个答案:

答案 0 :(得分:2)

(回答我自己的问题感觉有点不道德,但是因为我找到了解决方案,我还是会这样做,而不是让问题悬而未决)

解决方案是在运行hdiutil创建.dmg文件之前,使用硬链接替换重复文件到第一个遇到的文件。我使用我为此目的编写的一个简单的C ++程序(仅仅因为我很顽固)这样做,但也有一些免费软件程序,如freedup,它们会为你做这件事。我没试过,但我想他们都工作得很好。