Sam*_*mir 7 search file-search hashing content-addressable-storage
有没有办法在搜索文件时将哈希值作为输入,并将完整的文件列表及其位置作为输出?
当尝试查明文件重复项时,这可能会很有帮助。我经常发现自己有一堆文件,我知道我已经将这些文件存储在某个位置,但我不知道在哪里。它们本质上是重复的。
例如,我可以在便携式硬盘驱动器上保存一堆文件,并且在台式计算机的内部硬盘驱动器上保存这些文件的硬拷贝......但我不确定位置!现在,如果文件未重命名,我可以进行文件名搜索以尝试在桌面上找到硬拷贝。然后我可以并排比较它们,如果它们相同,我可以删除便携式硬盘驱动器上的副本。但是,如果文件已在任一硬盘驱动器上重命名,则这可能不起作用(取决于新名称与原始名称的不同程度)。
如果一个文件被重命名,但没有编辑,我可以计算它的哈希值,例如 SHA1 值为74e7432df4a66f246b5214d60b190b67e2f6ce52. 然后,我希望在搜索文件时将此值作为输入,并让操作系统在给定目录或整个文件系统中搜索具有此精确 SHA1 哈希值的文件,并输出存储这些文件的位置的完整列表。
我使用的是 Windows,但我通常有兴趣了解如何实现这样的事情,无论操作系统如何。
这是一个有趣的问题。我一直在使用一个名为 fdupes 的工具来完成类似的事情。Fdupes 将递归搜索目录并将每个文件与其他文件进行比较。首先,它比较大小,如果大小相同,则创建文件的哈希值并进行比较,如果哈希值相同,则实际上逐字节遍历每个文件并进行比较。
当 if 找到所有真正相同的文件时,您可以让它做几件事。我让它删除重复文件并在其位置创建硬链接(从而节省硬盘空间),尽管您可以让它简单地输出重复文件的位置而不对它们执行任何操作。这就是您所询问的场景。
fdupes 的一些缺点是,据我所知,它仅适用于 Linux,并且由于它将每个文件与其他文件进行比较,因此需要相当多的 I/O 和运行时间。它不会“搜索”每个文件,但会列出具有相同哈希值的所有文件。
我强烈推荐它,并将其设置为每天在 cron 作业中运行,这样我就不会出现任何不必要的数据重复(当然,它不包括我的备份)。