我有一个包含文件和其他目录的目录。我有一个特定的文件,我知道在给定的目录树中有某些重复项。
如何在macOS上使用Bash找到这些重复项?
基本上,我正在寻找类似这样的东西(伪代码):
$ find-duplicates --of foo.txt --in ~/some/dir --recursive
我已经看到有fdupes
之类的工具,但我对任何重复文件(只是特定文件的重复文件)既不感兴趣,也不感兴趣在磁盘上的任何地方重复(仅限于给定目录或其子目录)。
我该怎么做?
答案 0 :(得分:3)
对于与 macOS 内置shell实用程序兼容的解决方案,请尝试以下方法:
find DIR -type f -print0 | xargs -0 md5 -r | grep "$(md5 -q FILE)"
其中:
DIR
是您感兴趣的目录; FILE
是您要搜索 duplicates 的文件(路径)。如果您只需要重复的文件路径,那么也可以通过它管道:
cut -d' ' -f2
答案 1 :(得分:2)
如果您要查找特定文件名,可以执行以下操作:
find ~/some/dir -name foo.txt
将返回目录中名为foo.txt
的所有文件的列表。如果你正在查看目录中是否有多个同名文件,你可以这样做:
find ~/some/dir -exec basename {} \; | sort | uniq -d
这将为您提供一个名称重复的文件列表(然后您可以再次使用find
来确定这些文件的存在位置。)
----编辑-----
如果你正在寻找相同的文件(使用相同的md5总和),你也可以这样做:
find . -type f -exec md5sum {} \; | sort | uniq -d --check-chars=32
---编辑2 ----
如果你的md5sum没有输出文件名,你可以使用:
find . -type f -exec echo -n "{} " \; -exec md5sum {} \; | awk {'print $2 $1'} | sort | uniq -d --check-chars=32
---编辑3 ----
如果您正在寻找具有特定md5总和的文件:
sum=`md5sum foo.txt | cut -f1 -d " "`
find ~/some/dir -type f -exec md5sum {} \; | grep $sum