我有许多文件夹,总共有几百万个文件(总计几TB)。我希望找到所有文件中的重复项。理想情况下,输出是一个简单的欺骗列表 - 我将用我自己的脚本进一步处理它们。
我知道有一个fdupes
命令显然使用“文件大小和 MD5 签名”来比较文件。
我不清楚的是,是否读取了我不想要的大小唯一的文件(并计算了它们的哈希值)。在我的情况下,数据量巨大,需要注意不要执行超出绝对必要的磁盘 I/O。此外,所使用的临时空间量应该最小化。
答案1
FS林特它的后端findup
可能正是您所需要的:
FSlint 扫描文件并过滤掉不同大小的文件。然后检查任何大小完全相同的剩余文件,以确保它们不是硬链接。如果用户选择“合并”结果,则可能会在先前的搜索中创建硬链接文件。一旦 FSlint 确定文件不是硬链接,它就会使用 md5sum 检查文件的各种签名。为了防止 md5sum 冲突,FSlint 将使用 sha1sum 检查重新检查任何剩余文件的签名。
答案2
林特是一个非常有效的工具,可以对文件系统进行重复数据删除等操作,如果需要,可以通过 xattrs 缓存信息以使后续运行速度更快,并提供 json 格式的元数据,以便您以自定义方式使用它挖掘出的信息:
rmlint finds space waste and other broken things on your filesystem and offers to remove it. It is able to find:
Duplicate files & directories.
Nonstripped Binaries
Broken symlinks.
Empty files.
Recursive empty directories.
Files with broken user or group id.
答案3
是的,如果大小与另一个文件匹配,我认为它将创建完整的 md5。这可能会造成浪费。对于大文件,一种更有效的方法可能是对第一个块进行 md5,并且仅在它们匹配时才进一步查找。
即检查大小,如果匹配则检查第一个块的 md5 (512k),如果匹配则检查接下来 2 个块的 md5 (1024k) ...等等。