0

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

  1. 我可以将整个内容视为常规文件夹并逐项处理内容。
  2. 我可以查看所有内容的所有修改日期,并为具有最近修改内容的那个保留完整的文件夹树。

我打算使用 (2),然后我发现 iPhoto 库实际上是作为一个包存储的,这意味着即使只更改了一张照片,我也会复制整个库(10 甚至 100 千兆字节)。

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

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

4

1 回答 1

0

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

如果是同步的两个版本,包应该不是什么大问题——只需提供一种恢复“备份”版本的方法,如有必要,它将“备份”中更改的文件与当前未更改的文件拼接在一起同步。不过,有一些事情需要注意:确保正确处理在两个快照之间删除或添加的文件。

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

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

于 2013-01-22T20:18:02.480 回答