在macosx上备份软件包的策略

时间:2013-01-22 08:37:44

标签: macos backup packages

我正在编写一个程序来跨文件系统同步文件,就像rsync一样,但是在处理软件包时我会陷入困境。这些文件夹由系统标识为包含一组连贯的文件。 Pages和Numbers可以使用包而不是单个文件,例如应用程序实际上是包。我的问题是我想保留最新版本并保留备份副本。据我所知,我有两个选择 -

  1. 我可以将整个事件视为常规文件夹,并按条目处理内容条目。
  2. 我可以查看所有内容的所有修改日期,并保留具有最近修改内容的完整文件夹树。
  3. 我要去(2)然后我发现iPhoto图库实际上是作为一个包存储的,这意味着即使只有一张照片被修改,我也会复制整个图书馆(10s甚至100s千兆字节) 。

    我对(1)的担心是单独处理内容文件可能会破坏内容。我还没有真正想出一个好的解决方案,可以保证软件包能够正常工作,并且在某些情况下不会产生不必要的巨大备份文件。如果它只是iPhoto,那么我可能会提出一个特殊情况,或者如果包大于某个用户指定的限制,可能会更改策略。

    软件包令人惊讶地神秘,系统将其视为软件包似乎不仅仅是在文件夹上设置扩展属性。

1 个答案:

答案 0 :(得分:0)

这取决于您对“备份”版本的处理方式。您是保留每个文件的两个版本(当前和前一个),还是两个版本的同步快照(即如果文件在最后两个同步之间没有更改,您只存储一个版本)?

如果它是同步的两个版本,那么软件包应该不是一个大问题 - 只需提供一种方法来恢复“备份”版本,如果需要,可以使用未更改的文件将已更改的文件与“备份”拼接在一起来自当前的同步。但有一些事项需要注意:确保正确处理在两个快照之间删除或添加的文件。

如果你要存储每个文件的两个版本,事情要复杂得多 - 你需要一些方法来记录包中的文件版本“一起”。我认为在这种情况下,我很想在包装中的某些内容发生变化时仅存储包中文件的备份版本。因此,例如,假设您同步一个名为preso.key的包。在第二次同步时,会修改preso.key / index.apxl.gz和preso.key / splash.png,因此这两个文件的旧版本将存储在备份中。在第三次同步时,preso.key / index.apxl.gz再次被修改,因此您存储它的新备份版本并删除preso.key / splash.png的备份版本

顺便说一下,节省空间的另一种方法是硬链接。如果你想存储两个“完整”版本的大包而不浪费空间,只需存储每个未更改文件的一个副本并将其硬链接到两个备份中。