唯一标识文件

我想索引文件在本地数据库,但我不明白我怎么能识别每个单独的文件。 例如,如果我将文件path存储在数据库中,那么如果文件被移动或删除,条目将不再有效。 我想,无论发生什么事情,都有一些唯一标识文件的方法,但是我没有用Google来成功。

这将是尤其是* nix / Linux和ext4,所以请不要特定于Windows或NTFS或类似的东西。

除了上面的出色建议之外,还可以考虑使用文件的inode编号属性,在具有ls -i的shell中查看。

在我的一个盒子上使用index.php:

ls -i

产量

196237 index.php

然后,我使用mv index.php index1.php重命名该文件,之后相同的ls -i产生:

196237 index1.php

(注意inode号码是一样的)

尝试使用散列方案(如MD5SHA-1SHA-2这将允许您按内容匹配文件。

基本上当你第一次创建索引时,你将散列所有你想要添加的文件。 这个字符串非常适合告诉两个文件是不同的还是相同的。 然后,当您需要查看是否有其中一个文件已经在索引中时,对其进行散列,然后将生成的散列与已知散列的表进行比较。

编辑:正如在评论中所说,这是一个好主意,纳入这两个数据的方式,你可以更准确地跟踪变化

如果您不考虑具有相同内容的文件,并且只想跟踪移动/重命名的文件,则使用其inode编号即可。 否则,你将不得不哈希的内容。

只有在inode美元飞行是他们可以重新分配后删除(取决于平台) – 你需要记录文件创建时间戳以及设备ID是100%肯定。 它更容易与Windows和他们的用户文件属性。