通过哈希在OSX中搜索文件重复项


14

我正在寻找一种方法来在OSX(Maverick,但更通常是OSX)中搜索确定的文件。特别是,我想执行以下操作:
给定File_001,我想搜索文件系统中是否存在该文件的副本。
不仅具有相同的名称,我还希望比较方法是像MD5,SHA等这样的哈希算法。

我尝试过的大多数“重复文件查找器”只是在驱动器/系统中搜索所有重复项。相反,我将有兴趣提交一个文件并搜索其副本。

有人知道这样的程序是否存在吗?也许Spotlight的功能有些晦涩?


1
注意确定给定文件是否为副本的哈希。例如,此方法可能无法使用.emlx文件(Apple Mail的文件格式)。为了帮助Spotlight,OSX将元数据附加到邮件文件中。即使Message-id相同,两条不同路径中的同一封电子邮件也可能具有不同的元数据。包含完全相同的原始电子邮件的两个文件的不同哈希值。
约翰D.

Answers:


17

您也可以使用fdupes。它没有搜索特定文件重复项的选项,但是您可以grep输出文件名:

fdupes -r1 .|grep filename

-r递归到目录中,并将-1每组重复的文件打印在一行上。

其他有用的例子:

fdupes -r . 查找当前目录下的所有重复文件;

fdupes -r . -dN 从每组重复项中删除除第一个重复项以外的所有内容;

fdupes -r dir1 dir2|grep dir1/|xargs rm删除中的重复项dir1

您可以安装fdupes使用brew install fdupes


是否有可能在当前目录中没有重复的文件列表?
gagarine

7

您可以使用一些shell命令轻松地自己构建它:

  • find ~ -type f -exec md5 -r '{}' \; > /tmp/md5.list

    将在所有文件上建立一个md5哈希值列表。

  • grep $(md5 -q FILE-TO-SEARCH) /tmp/md5.list

    将搜索FILE-TO-SEARCH的md5哈希

但是,运行第一个命令(尤其是在整个光盘上运行它)将花费很长时间。


如果您只想搜索一个文件,也可以使用

SIZE=$(stat -f '%z' FILE-TO-SEARCH)
MD5=$(md5 -q FILE-TO-SEARCH)
find ~ -type f -size ${SIZE}c | while read f; do
    [[ $MD5 = $(md5 -q "$f") ]] && echo $f
done

第一遍应该是通过精确尺寸操作找到的。
biziclop 2014年

@biziclop如果只想搜索一个文件,则可以。如果要搜索多个索引,一次建立索引并随后搜索整个索引文件会更快。
nohillside

1
当然,这是真的,我只是在问题中注意到了这句话:“相反,我将有兴趣提交一个文件并搜索其副本。”
biziclop 2014年

fdupes应该更快,首先执行日期比较,然后进行部分哈希,然后进行完整哈希。
gagarine

1

如果将FILE_001的大小和哈希值替换为命令,则此方法应该有效。

198452个字节是我使用的文件大小,文件md5哈希为3915dc84b4f464d0d550113287c8273b

find . -type f -size 198452c -exec md5 -r {} \; |
    grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'

输出将是文件列表,这些文件的路径名相对于发送给find命令的目录。

这种方法的优势在于,它将仅对与原始大小匹配的文件进行哈希处理,并且仅输出与哈希值匹配的文件名。


0

如果您不想弄乱脚本,可以在Mac App Store中使用Araxis查找重复文件 $ 10 接近所需的行为。他们的网站上还有一个7天的演示。查找重复文件通过计算每个文件的哈希值来搜索重复项。

您可以近似地估计想要的行为,即使用您关心的单个文件来设置一个文件夹,然后添加要搜索的文件夹。这还将在搜索路径中报告其他重复项(如果有)。

这个程序有很多不错的排序功能,使结果非常容易理解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.