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

来源:互联网 发布:豆豆软件 编辑:程序博客网 时间:2024/05/01 05:43

一、前言

在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 ./Test1Files ./Test/1.txt and ./Test1/1.txt differFiles ./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                               ab                               bc                               cd                               de                               ef                               fg                               gh                               hj                               |hk                               |hl                               |hm                               |hn                               |h

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