2

我想在本地数据库中索引文件,但我不明白如何识别每个单独的文件。例如,如果我将文件路径存储在数据库中,那么如果文件被移动或删除,则该条目将不再有效。我想无论文件发生什么情况,都有某种唯一标识文件的方法,但我在 Google 上没有成功。

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

4

4 回答 4

7

除了上面的优秀建议之外,您还可以考虑使用文件的 inode number 属性,可以在带有ls -i.

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

ls -i

产量

196237 index.php

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

196237 index1.php

(注意inode号是一样的)

于 2012-08-21T17:31:50.490 回答
2

尝试使用诸如MD5,之类的散列方案SHA-1,否则SHA-2这些方案将允许您按内容匹配文件。

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

编辑:正如评论中所说,合并两个数据是一个好主意,这样您就可以更准确地跟踪更改

于 2012-08-21T17:22:28.860 回答
0

如果您不认为具有相同内容的文件相同并且只想跟踪移动/重命名的文件相同,那么使用它的 inode 号就可以了。否则,您将不得不对内容进行哈希处理。

于 2012-08-21T17:32:06.663 回答
0

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

于 2013-07-04T13:10:03.530 回答