唯一标识文件

时间:2012-08-21 17:19:46

标签: linux file filesystems

我想索引本地数据库中的文件,但我不明白如何识别每个文件。例如,如果我将文件路径存储在数据库中,那么如果移动或删除文件,该条目将不再有效。我想有一些方法可以唯一地识别文件,无论他们发生了什么,但我在谷歌方面没有成功。

这将特别针对* nix / Linux和ext4,所以请不要特别针对windows或ntfs或类似的东西。

4 个答案:

答案 0 :(得分:7)

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

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

ls -i

产量

196237 index.php

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

196237 index1.php

(注意inode编号是相同的)

答案 1 :(得分:2)

尝试使用散列方案,例如MD5SHA-1SHA-2,这样可以让您按内容匹配文件。

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

编辑:正如评论中所说的那样,将两个数据合并在一起是个好主意,这样你就可以更准确地跟踪变化

答案 2 :(得分:1)

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

答案 3 :(得分:0)

只有使用inode的软膏是可以在删除后重新分配(取决于平台) - 您需要记录文件创建时间戳以及设备ID 100%确定。使用Windows及其用户文件属性更容易。