如何在脚本中使用 diff
命令来显示目录中具有相同内容的所有文件?也许我应该提供更多细节。
脚本应在指定的目录和子目录,并将它们显示在排序的终端中文件大小的降序。
diff
不这样做;你需要将每个文件与每个文件进行比较,一般来说,这不是diff
要做的。
我建议使用 find
打印相关树中所有文件的列表,并按大小对它们进行排序。 仅当两个文件的大小相同时,比较它们的内容才有意义。 除非您有大量大小完全相同的文件,否则这将大大加快该过程:
find . -type f -printf "%s %pn" | 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,因此它们不会被注意到。