2013-03-27 59 views
1

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

的最终目标是要确定是否一个文件的数据具有(不情愿)T1T2之间改变,以通过捕获和在T1记录数据散列和创建/文件的修改的属性,并将它们与所述比较等同于T2。如果所有属性都保持不变,但哈希不验证,我们可以说有问题。在所有其他情况下,我们可能愿意说改变后的哈希值是修改后的结果,哈希值和未改变的修改值是根据文件(数据)完全没有改变的结果。

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

  • 的文件路径:但是,如果文件移动到不同的位置,此方法将失败。
  • 文件数据的数据散列:即使指针已被移动到不同的目录,也会允许找到文件,或者(或者)指向磁盘上文件数据的指针,但数据无法更改,或者此方法也失败。

我的想法是在T1检索特定文件的fileid跟踪文件在T2,即使它已经改变了它的位置,因此不需要在被看作是一个文件。

我知道的两种方法pywin优惠。 win32file.GetFileInformationByHandle()win32file.GetFileInformationByHandleEx(),但它们显然只限于特定的文件系统,打破了跨平台兼容性,摆脱了通用方法来跟踪文件。

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

任何头脑风暴的思想是值得欢迎的!

+0

如何考虑的文件内容MD5哈希值。并通过不同的时间检查md5哈希? – 2013-03-27 04:03:20

+1

在linux文件系统上(我想是'ext'),如果我没有弄错的话,inode会在文件移动时保持不变。在窗户上,但是......我不确定。这是一个很好的问题。您可能需要编写一些特定于平台的代码,并涵盖所有基础。 – mpen 2013-03-27 04:05:30

+1

@SidharthShah:他报道过。如果文件移动*和*在T1和T2之间修改,则会被拧紧。散列会有所不同;您将无法再找到该文件。 – mpen 2013-03-27 04:06:18

回答

4

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

  1. 不能使用文件内容跟踪的身份,因为内容的变化。

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

版本控制系统有三种方式处理这个问题:

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

  2. (Subversion)的轨道移动手动操作。(Git)使用试探法将操作标记为基于文件内容更改的“移动”操作(例如,如果新文件与现有文件的差异小于50%,则将其标记为复印件)。

事情是这样的索引节点号稳定,不被信任。在这里,你可以看到,编辑文件,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 
+0

梦幻般的答案,谢谢。我没有考虑的一个很好而且非常明显的一点是许多应用程序会将文件的数据重新写入删除前者的新文件。看看其他版本控制系统如何处理这个问题,我会研究Git的启发式方法,看看它是否可以应用于任意数据,文本和二进制文件。从一开始就信任并依赖文件ID/inode似乎有风险。 – bossi 2013-03-27 04:34:21

相关问题