Bash如何在目录中查找具有相同内容的文件

时间:2014-01-14 11:16:31

标签: bash diff

如何在脚本中使用diff命令显示目录中具有相同内容的所有文件? 也许我应该提供更多细节。

脚本应该在指定的文件中找到相同的文件 目录和子目录,并在终端中显示它们 文件大小的降序。

1 个答案:

答案 0 :(得分:4)

diff不这样做;您需要将每个文件与每个文件进行比较,一般而言,这不是diff的意图。

我建议使用find打印相关树中所有文件的列表,并按其大小对其进行排序。只有两个文件大小相同,比较它们的内容才有意义。除非你有大量完全相同大小的文件,否则这将大大加快这个过程:

find . -type f -printf "%s %p\n" | sort -n | {
  oldSize=none
  while read size path
  do
    if [ "$oldSize" = "$size" ]
    then
      cmp -s "$oldPath" "$path" && echo "$oldPath equals $path"
    fi
    oldPath=$path
    oldSize=$size
  done
}

理论上,这个脚本可能无法找到双打,即如果有几个相同大小的文件,其中只有一些真正相同的内容。如果它们按照A B A的顺序排序(当然,取决于它们的路径名称),A和A从不进行比较,因此它们将被忽视。