跟踪文件随着时间的推移

时间:2013-03-27 03:58:29

标签: python file file-io filesystems

我的想法是在两个时间点T1T2之间跟踪文件系统中的特定文件。这里的重点在于将文件视为文件系统上的唯一实体。可以改变数据和属性但仍然保持其独特身份的那个。

最终目标是通过捕获和记录文件的数据哈希和创建/修改属性来确定文件的数据是否(不情愿地)在T1T2之间发生了变化在T1,并将它们与T2处的等价物进行比较。如果所有属性都未更改但散列未验证,则可以说存在问题。在所有其他情况下,我们可能愿意说改变的散列是修改的结果,并且未更改的散列和未更改的修改 - 属性根本不对文件(数据)进行更改。

现在,有几种方法可以引用文件和相应的缺点:

  • 文件的路径:但是,如果将文件移动到其他位置,则此方法将失败。
  • 文件数据的数据哈希:即使指针已移动,也可以找到文件,或者更确切地说是(a)指向磁盘上文件数据的指针到另一个目录,但数据无法更改或此方法也失败。

我的想法是在T1检索该特定文件的fileId以跟踪T2处的文件,即使它已更改其位置,因此无需将其视为文件。

我知道pywin提供的两种方法。 win32file.GetFileInformationByHandle()win32file.GetFileInformationByHandleEx(),但它们显然仅限于特定的文件系统,打破了跨平台兼容性,并且偏离了跟踪文件的通用方法。

我的问题很简单:是否还有其他想法/理论来跟踪文件,理想情况是平台/ FS?

欢迎任何有头脑风暴的思想食物!

1 个答案:

答案 0 :(得分:4)

一般来说这并不可行,因为文件身份的概念是一种幻觉(类似于身体认同的幻觉,但这不是一个哲学论坛)。

  1. 您无法使用文件内容跟踪身份,因为内容已更改。

  2. 您无法跟踪附加到该文件的任何其他属性,因为许多文件编辑器将通过删除旧文件并创建新文件来保存更改。

  3. 版本控制系统以三种方式处理此问题:

    1. (CVS)不要跟踪移动操作。

    2. (Subversion)手动跟踪移动操作。

    3. (Git)使用启发式操作将操作标记为基于文件内容更改的“移动”操作(例如,如果新文件与现有文件的差异小于50%,则标记为作为副本)。

    4. 像inode数字这样的东西稳定且不值得信任。在这里,您可以看到使用Vim编辑文件将更改inode编号,我们可以使用stat -f %i来检查:

      $ touch file.txt
      $ stat -f %i file.txt
      4828200
      $ vim file.txt
      ...make changes to file.txt...
      $ stat -f %i file.txt 
      4828218