如何在脚本中使用diff
命令显示目录中具有相同内容的所有文件?
也许我应该提供更多细节。
脚本应该在指定的文件中找到相同的文件 目录和子目录,并在终端中显示它们 文件大小的降序。
答案 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从不进行比较,因此它们将被忽视。