有没有办法确定文件是否已被修改和移动?

时间:2010-04-29 23:57:25

标签: file filesystems

我正在编写一个对文件进行编目的应用程序,并通过单独的“side-car”文件将它们与额外的元数据相关联。如果通过我的程序对文件进行了更改,则可以使它们与相应的元数据文件保持同步。但是,我正在试图找到一种方法来处理在程序未运行时手动修改文件的人。

当我的程序启动时,它会扫描文件系统,并将找到的文件与之前记录的文件系统进行比较。删除或添加文件后,可以非常直接地进行更新。但是,如果文件被移动或重命名,那么我的程序会将其视为要删除的旧文件,并添加新文件。但我不想放松文件及其元数据之间的关联。

我以为我可以存储每个文件的哈希,所以我可以查看新发现的文件是否真的是以前已知的文件已被移动或重命名。但是,如果文件被移动/重命名和修改,则散列也不匹配。

那么,即使重命名,移动或修改了文件,我还能跟踪哪个文件的其他唯一标识符?

1 个答案:

答案 0 :(得分:1)

该文件没有唯一标识符。您可以使用的最好的是启发式和差异比较方法。如果删除和添加的文件之间的差异很小,那么这可能是修改+移动操作。或许不是。

git有一个非常好的文件重命名/移动探测器。也许你可以从中借鉴一些想法。