我想索引本地数据库中的文件,但我不明白如何识别每个文件。例如,如果我将文件路径存储在数据库中,那么如果移动或删除文件,该条目将不再有效。我想有一些方法可以唯一地识别文件,无论他们发生了什么,但我在谷歌方面没有成功。
这将特别针对* nix / Linux和ext4,所以请不要特别针对windows或ntfs或类似的东西。
答案 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)
尝试使用散列方案,例如MD5
,SHA-1
或SHA-2
,这样可以让您按内容匹配文件。
基本上,当您第一次创建索引时,您将散列要添加的所有文件。这个字符串非常适合告诉两个文件是不同还是相同。然后,当您需要查看其中一个文件是否已存在于索引中时,对其进行哈希处理,然后将生成的哈希值与已知哈希表进行比较。
编辑:正如评论中所说的那样,将两个数据合并在一起是个好主意,这样你就可以更准确地跟踪变化答案 2 :(得分:1)
如果您不考虑具有相同内容的文件并且只想跟踪移动/重命名的文件相同,那么使用其inode编号就可以了。否则你将不得不哈希内容。
答案 3 :(得分:0)
只有使用inode的软膏是可以在删除后重新分配(取决于平台) - 您需要记录文件创建时间戳以及设备ID 100%确定。使用Windows及其用户文件属性更容易。