我正在寻找一种方法来在OSX(Maverick,但更通常是OSX)中搜索确定的文件。特别是,我想执行以下操作:
给定File_001,我想搜索文件系统中是否存在该文件的副本。
不仅具有相同的名称,我还希望比较方法是像MD5,SHA等这样的哈希算法。
我尝试过的大多数“重复文件查找器”只是在驱动器/系统中搜索所有重复项。相反,我将有兴趣提交一个文件并搜索其副本。
有人知道这样的程序是否存在吗?也许Spotlight的功能有些晦涩?
我正在寻找一种方法来在OSX(Maverick,但更通常是OSX)中搜索确定的文件。特别是,我想执行以下操作:
给定File_001,我想搜索文件系统中是否存在该文件的副本。
不仅具有相同的名称,我还希望比较方法是像MD5,SHA等这样的哈希算法。
我尝试过的大多数“重复文件查找器”只是在驱动器/系统中搜索所有重复项。相反,我将有兴趣提交一个文件并搜索其副本。
有人知道这样的程序是否存在吗?也许Spotlight的功能有些晦涩?
Answers:
您也可以使用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
。
您可以使用一些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
如果将FILE_001的大小和哈希值替换为命令,则此方法应该有效。
198452个字节是我使用的文件大小,文件md5哈希为3915dc84b4f464d0d550113287c8273b
find . -type f -size 198452c -exec md5 -r {} \; |
grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'
输出将是文件列表,这些文件的路径名相对于发送给find命令的目录。
这种方法的优势在于,它将仅对与原始大小匹配的文件进行哈希处理,并且仅输出与哈希值匹配的文件名。
如果您不想弄乱脚本,可以在Mac App Store中使用Araxis查找重复文件 $ 10 接近所需的行为。他们的网站上还有一个7天的演示。查找重复文件通过计算每个文件的哈希值来搜索重复项。
您可以近似地估计想要的行为,即使用您关心的单个文件来设置一个文件夹,然后添加要搜索的文件夹。这还将在搜索路径中报告其他重复项(如果有)。
这个程序有很多不错的排序功能,使结果非常容易理解。