这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战
命令简介
diff
命令主要用于逐行比较两个指定的文件,显示文件之间的差异。也可以逐对比较两个目录中的相应文件。如果两个文件相同,diff
命令通常不会输出任何信息;如果两个文件不同,diff
命令将会以不同的方式(取决于命令行选项)显示两个文件的不同点。
最新版本的 diff
命令还支持二进制文件比较。
命令格式
diff[参数][文件1或目录1][文件2或目录2]
复制代码
命令参数
参数 | 解释 |
---|---|
-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 |
把不存在的第一个文件作为空文件处理。 |
应用实例
- 比较两个文件
$ cat file1.txt
1001
1002
1003
$ cat file2.txt
1001
1002
1003a
1004
$ diff file1.txt file2.txt
3c3,4
< 1003
---
> 1003a
> 1004
复制代码
上面的 3c3,4
表示 file1.txt
和 file2.txt
文件在 3
行和第 4
行内容有所不同;
diff 的 normal 显示格式有三种提示:
a:add
c:change
d:delete
参考文档
- diff命令
- 《Linux 常用命令简明手册》—— 邢国庆编著