在macOS上查找特定文件的副本

时间:2017-05-15 19:18:59

标签: bash macos terminal duplicates

我有一个包含文件和其他目录的目录。我有一个特定的文件,我知道在给定的目录树中有某些重复项。

如何在macOS上使用Bash找到这些重复项?

基本上,我正在寻找类似这样的东西(伪代码):

$ find-duplicates --of foo.txt --in ~/some/dir --recursive

我已经看到有fdupes之类的工具,但我对任何重复文件(只是特定文件的重复文件)既不感兴趣,也不感兴趣在磁盘上的任何地方重复(仅限于给定目录或其子目录)。

我该怎么做?

2 个答案:

答案 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