Diff命令的功能

逐行比较两个文本文件,列出其不同之处。

对给出的文件进行系统的检查,并显示出两个文件中所有不同的行
不要求事先对文件进行排序。


语法

diff [options] file1 file2

如果file1file2是目录,diff将使用该目录中的同名文件进行比较。

[options]主要参数

参数 作用
-a 将所有文件当作文本文件来处理。
-b–ignore-space-change  忽略空格造成的不同。
-B–ignore-blank-lines  忽略空行造成的不同。
-c 使用纲要输出格式。
-H 利用试探法加速对大文件的搜索。
-I 忽略大小写的变化。
-n –rcs 输出RCS格式。
-N–new-file  在比较目录时,若文件A仅出现在某个目录中
会显示:Only in 目录;
文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-r或–recursive  比较子目录中的文件。
-u,-U<列数>–unified=<列数>  以合并的方式来显示文件内容的不同。

----

使用方法的实例说明

例如:diff /usr/xu mine

把目录/usr/xu 中名为mine的文件与 当前目录中的mine文件进行比较。

通常输出由下述形式的行组成:

n1 a n3,n4

n1,n2 d n3

n1,n2 c n3,n4 

这些行类似ed命令把filel转换成file2
字母a、d和c之前的行号n1,n2是针对file1
其后面的行号n3,n4是针对file2的。

字母a、d和c分别表示附加删除修改操作。

在上述形式的每一行的后面跟随受到影响的若干行

< 打头的行属于第一个文件,以 > 打头的行属于第二个文件。


diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。

如果file1和file2都是目录,则diff会产生很多信息。

diff最常用的功能

  1. diff有很多功能平时不常用到,最常用的功能莫过于生成patch文件了:

    diff -urN old/ new/ > mysoft.patch

    参数:

    -u 表示使用 unified 格式
    -r 表示比较目录
    -N 表示将不存在的文件当作空文件处理

    这样新添加的文件也会出现在patch文件中。

    然后在需要应用patch的地方使用下述命令即可:

    patch -p0 < mysoft.patch

  2. diff-y 命令(长格式为 –side-by-side)

    `diff -y file1 file2` -W <number>

    可以将屏幕分成左右两部分,来比较两个文件之间的差异。

    如果要改变左右各部分的宽度,可以通过 -W (–width)参数来指定。

  3. –ignore-blank-lines 参数

    不检查空白行。

    这样DOS格式和Unix格式的文件互相比较时,就不至于因为换行符不一致而出现大量的差异。