1

我的想法是在两个时间点之间随时间跟踪文件系统上的特定文件,T1并且T2. 这里的重点在于将文件视为文件系统上的唯一实体。一种可以改变数据和属性但仍保持其独特身份的产品。

最终目标是通过捕获T1T2记录文件的数据哈希和创建/修改属性T1并将它们与T2. 如果所有属性都未更改但哈希未验证,我们可以说存在问题。在所有其他情况下,我们可能愿意说更改的哈希是修改的结果,而未更改的哈希和未更改的修改属性是文件(数据)根本没有更改的结果。

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

  • 文件的路径:但是,如果将文件移动到不同的位置,此方法将失败。
  • 文件数据的数据哈希:允许找到文件,或者更确切地说(a)指向磁盘上文件数据的指针,即使指针已移动到不同的目录,但数据不能更改或者这种方法也失败了。

我的想法是检索该特定文件的 fileIdT1以跟踪该文件 at T2,即使它已更改其位置,因此不需要将其视为文件。

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

我的问题很简单:是否有任何其他想法/理论来跟踪文件,最好是跨平台/FS?

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

4

1 回答 1

4

一般来说,这并不可行,因为文件身份的想法是一种幻觉(类似于物理身份的幻觉,但这不是哲学论坛)。

  1. 您无法使用文件内容跟踪身份,因为内容会发生变化。

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

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

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

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

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

像 inode 数量这样的东西并不稳定,不值得信任。在这里,您可以看到使用 Vim 编辑文件会更改 inode 编号,我们可以使用以下命令进行检查stat -f %i

$ 触摸文件.txt
$ stat -f %i 文件.txt
4828200
$ vim 文件.txt
...对 file.txt 进行更改...
$ stat -f %i 文件.txt
4828218
于 2013-03-27T04:10:20.760 回答