Linux常用文本比对命令——diff

一、前言

在windows环境下我们通常会选择使用功能强大显示友好的Beyond Compare工具来进行文件的比对。其实在Linux系统中就自带了同样的强大比对命令,可以让我们在Linux系统下直接使用。diff命令用以比对两个文件的不同,功能强大使用方便。diff命令是逐行进行比对,如果命令使用在目录下,则可以比对两个目录中具有同名的文件。

二、语法以及参数

diff (-参数) (文件1/目录1) (文件2/目录2)
-<行数>:指定要显示多少行的文本。此参数必须与-c-u参数一并使用; 
-a或——text:diff预设只会逐行比较文本文件; 
-b--ignore-space-change:不检查空格字符的不同; 
-B--ignore-blank-lines:不检查空白行; 
-c:显示全部内容,并标出不同之处; 
-C<行数>--context<行数>:与执行“-c-<行数>”指令相同; 
-d或——minimal:使用不同的演算法,以小的单位来做比较; 
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集; 
-e或——ed:此参数的输出格式可用于ed的script文件; 
-f-forward-ed:输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处; 
-H--speed-large-files:比较大文件时,可加快速度; 
-l<字符或字符串>--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异; 
-i--ignore-case:不检查大小写的不同; 
-l或——paginate:将结果交由pr程序来分页; 
-n或——rcs:将比较结果以RCS的格式来显示; 
-N--new-file:在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录,文件A 若使用-N参数,则diff会将文件A 与一个空白的文件比较; 
-p:若比较的文件为C语言的程序码文件时,显示差异所在的函数名称; 
-P--unidirectional-new-file:与-N类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个文件与空白的文件做比较; 
-q--brief:仅显示有无差异,不显示详细的信息; -r或——recursive:比较子目录中的文件; 
-s--report-identical-files:若没有发现任何差异,仍然显示信息; 
-S<文件>--starting-file<文件>:在比较目录时,从指定的文件开始比较; 
-t--expand-tabs:在输出时,将tab字符展开; 
-T--initial-tab:在每行前面加上tab字符以便对齐; 
-u-U<列数>--unified=<列数>:以合并的方式来显示文件内容的不同; 
-v或——version:显示版本信息; -w--ignore-all-space:忽略全部的空格字符; 
-W<宽度>--width<宽度>:在使用-y参数时,指定栏宽; 
-x<文件名或目录>--exclude<文件名或目录>:不比较选项中所指定的文件或目录; 
-X<文件>--exclude-from<文件>;您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件; 
-y--side-by-side:以并列的方式显示文件的异同之处; 
--help:显示帮助; 
--left-column:在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容; 
--suppress-common-lines:在使用-y参数时,仅显示不同之处。

三、常用实例

1、仅比对两个文件是否相同

[roy@localhost Test]$ diff -q 1.txt 2.txt 
Files 1.txt and 2.txt differ

2、比对两个目录下所有文件是否相同

[roy@localhost Documents]$ diff -rqN ./Test ./Test1
Files ./Test/1.txt and ./Test1/1.txt differ
Files ./Test/2.txt and ./Test1/2.txt differ

如果是很大的目录,不同文件非常多,显示查看不方便又或者得到记录文件的话,使用重定向到日志中。

[roy@localhost Documents]$ diff -rqN ./Test ./Test1 > filelist.log

之后查看filelist.log文件就行了

3、比对两个文件并显示异常位置

[roy@localhost Test]$ diff -y 1.txt 2.txt 
a                               a
b                               b
c                               c
d                               d
e                               e
f                               f
g                               g
h                               h
j                               |h
k                               |h
l                               |h
m                               |h
n                               |h

“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容

你可能感兴趣的:(Linux)