diff 报告两个文件不同,尽管它们是相同的!

diff 报告两个文件不同,尽管它们是相同的!

我有两个文件看起来与我相同(包括尾随空格和换行符),但 diff 仍然说它们不同。即使当我进行diff -y并排比较时,线条看起来也完全相同。 diff 的输出是整个 2 个文件。

知道是什么原因造成的吗?

答案1

奇怪..你能试试cmp吗?您可能也想使用“ -b”选项。

cmp 手册页- 逐字节比较两个文件。

这是 Unix/Linux 的优点之一..有这么多工具:)

答案2

尝试:

diff file1 file2 | cat -t

-t选项将导致cat清楚地显示任何特殊字符 - 例如。^M对于 CR,^I对于选项卡。

从手册页(OS X):

 -t      Display non-printing characters (see the -v option), and display tab characters as `^I'.

 -v      Display non-printing characters so they are visible.
         Control characters print as `^X' for control-X; the delete character
         (octal 0177) prints as `^?'.  Non-ASCII characters
         (with the high bit set) are printed as `M-' (for meta) followed by the
         character for the low 7 bits.

答案3

差异可能是由 DOS 与 UNIX 行结尾或类似原因引起的吗?

如果你是hexdump他们呢?这可能会更明显地显示差异,例如:

hexdump -C file1 > file1.hex
hexdump -C file2 > file2.hex
diff file1.hex file2.hex

答案4

其他答案足够完整,但提供了明确显示某种看不见的差异的方法。然而,还有另一种选择:忽略这些差异,这些差异在某种程度上并不重要。在某些情况下,了解这些差异并没有什么用处。

diff命令有一些与此相关的有用选项:

--strip-trailing-cr
    strip trailing carriage return on input

-B, --ignore-blank-lines
    ignore changes where lines are all blank

-Z, --ignore-trailing-space
    ignore white space at line end

就我个人而言,我发现--strip-trailing-cr很有用,特别是在大型项目上使用-r(ie --recursive) 选项时,或者当 Git 的core.autocrlf不是false(即是trueinput)。

有关这些选项的更多信息以及更多信息,请参阅它的手册页(或通过man diff)。

笔记:使用这些选项会影响获取结果的性能,尤其是在文件/目录很大的情况下。在我自己的一个案例中,它将操作时间从0.321s增加到0.422s

相关内容