diff

显示文件之间的差别


语法格式

diff [-abBcdeEilNqstTuwy] [-C num] [-I regexp] [-U num] [-W num] [gnu-opts]
        file1 file2
diff [-abBcdeEilNqrstTuwy] [-C num] [-I regexp] [-S file] [-U num] [-W num]
        [-x pattern] [-X file] [gnu-opts] dir1 dir2
diff [-abBcdeEilNqrstTuwy] [-C num] [-I regexp] [-S file] [-U num] [-W num]
        [-x pattern] [-X file] [gnu-opts] files dir
diff [-abBcdeEilNqrstTuwy] [-C num] [-I regexp] [-S file] [-U num] [-W num]
        [-x pattern] [-X file] [gnu-opts] dir files
diff [--help] [-v|--version]

命令简介

diff命令主要用于逐行比较两个指定的文件,显示文件之间的差异。也可以逐对比较两个目录中的相应文件。如果两个文件相同,diff命令通常不会输出任何信息;如果两个文件不同,diff命令将会以不同的方式(取决于命令行选项)显示两个文件的不同点。

在上述第一种语法格式中,file1file2是欲比较的两个文件。如果其中的一个文件指定为“-”,表示从标准输入读取数据,与另一个文件进行比较。

在第二种语法格式中,dir1dir2是两个目录,表示对两个目录中的同名文件逐对进行比较。

在第三种和第四种语法格式中,files是一个或一组文件,dir是一个目录,表示以指定的文件为准,与目录中的同名文件逐对进行比较。

命令选项

-a, --text  把所有文件当作文本文件处理,逐行比较。

-b, --ignore-space-change  比较时忽略因空格数量的多少而引起的差别。

-B, --ignore-blank-lines  比较时忽略因空行而引起的差别。

-c, -C num, --context[=num]  首先输出两个文件的名字与修改时间等信息,其次输出第一个和第二个文件以起始行和终止行表示的数据行范围,最后输出不同的数据行及前后相邻的num行数据。num的默认值为3。

-d, --minimal  尽可能找出文件之间的微小差异。这个选项会影响diff命令的运行速度。

-e, --ed  针对两个文件的差别,输出一个ed脚本文件,利用其中提供的ed编辑命令,能够确保两个文件一致。

-E, --ignore-tab-expansion  比较时忽略因制表符展开而引起的差异。

-i, --ignore-case  比较时忽略大小写字母的差异。

-I regexp, --ignore-matching-lines=regexp  比较时忽略两个文件中均匹配指定模式的数据行。

-l, --paginate  把比较结果传递给pr命令,形成一个标记时间、命令行和页码标题的输出形式,写到标准输出。

-N, --new-file  把不存在的文件作为空文件处理。

-q, --brief  仅当文件不同时才输出文字说明信息(文件相同时不显示任何信息)。可用于比较二进制数据文件。

-r, --recursive  按目录方式逐队比较文件时,递归地处理两个目录中的任何子目录。

-s, --report-identical-files  如果两个文件相同,输出文字说明信息。如果两个文件不同,按常规处理,显示存在差异的数据行。

-S file, --starting-file=file  比较目录时,从指定的文件开始逐一比较。可用于恢复中断的比较。

-t, --expand-tabs  展开制表符,输出适当数量的空格。

-T, --initial-tab  在输出的数据行之前插入一个制表符。

-u, -U num, --unified[=num]  同“-c”选项,只是以起始行与输出行数替代数据行范围。

-w, --ignore-all-space  比较时忽略所有的空格字符。

-W num, --width=num  指定数据显示的最大行宽,默认的行宽为130列。

-x pattern, --exclude=pattern  按目录方式比较时,忽略基本文件名部分(不含目录)匹配指定模式的文件或子目录。

-X file, --exclude-from=file  按目录方式比较时,忽略基本文件名部分(不含目录)匹配指定文件中包含的任何模式的文件或子目录。

-y, --side-by-side  采用两列的形式显示文件之间的差异。

--from-file=file1  使用指定的文件作为第一个文件参数,与其他文件进行比较。注意,指定的文件可以是一个目录。

--to-file=file2  使用指定的文件作为第二个文件参数,与其他文件进行比较。注意,指定的文件可以是一个目录。

--ignore-file-name-case  比较文件名时,忽略大小写字母的差异。

--left-column  指定“-y”选项两列显示时,再指定此选项表示仅在左边第一列输出相同的数据行,第二列省略。

--speed-large-files  假定文件存在大量零散的微小差异,采用探索法加速处理这样的大型文件。

--strip-trailing-cr  删除输入数据行尾的回车字符。

--suppress-common-lines  禁止输出两个文件相同的数据行(默认的做法)。

--unidirectional-new-file  把不存在的第一个文件作为空文件处理。

应用实例

1. 比较两个文件,输出结果“3c3”表示两个文件的第3行数据不同,原因是其中的数据发生了变动(“c”)。

$ diff test1 test2
3c3
< which are all alike.
---
> which are all different.
$

2. 采用两列的形式显示两个文件之间的差异。

$ diff -W 80 -y test1 test2
You are in a maze of                    You are in a maze of
twisty little passages                  twisty little passages
which are all alike.                  | which are all different.
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z