首先,diff命令就是以逐行的方式对比文件的差异,如果对比的是目录,diff也会比较目录中相同文件名的。我们根据根据修改前后文件的对比,找出修改了文件中的哪几个地方,然后对比修改前后的结果。
下面看看diff命令参数注释:
-<行数>:指定要显示多少行的文本。此参数必须与-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参数时,仅显示不同之处。
对比文件
下面我们不使用任何参数对比一下文件
[root@www.wulaoer.org wulaoer]# cat wulaoer.json golong python3 python devops 运维开发 [root@www.wulaoer.org wulaoer]# cat wolf.json python python3 mysql etcd kubernetes [root@www.wulaoer.org wulaoer]# diff wulaoer.json wolf.json 1,2d0 < golong < python3 4,5c2,5 < devops < 运维开发 --- > python3 > mysql > etcd > kubernetes
1,2d0是第一个文件的第一行和第二行的内容,如果d后面跟的不是0而是1,2意思是wulaoer.json文件的第一行和第二行删除后与wolf.json文件的第一行和第二行相等,这里显示的不是1,2d1,2。下面的4,5c2,5是代表wulaoer.json文件中的第四行与wolf.json文件第二行至第五行不同
[root@www.wulaoer.org wulaoer]# diff wulaoer.json wolf.json -c *** wulaoer.json 2020-04-07 01:39:13.907466643 +0800 --- wolf.json 2020-04-07 23:35:01.819913109 +0800 *************** *** 1,7 **** #表示wulaoer.json文件内容是1,7行 - golong - python3 python ! devops ! 运维开发 ! jenkins ! ruby --- 1,5 ---- #表示wolf.json文件内容是1,5行 python ! python3 ! mysql ! etcd ! kubernetes
对比两个文件的不同,并显示所有内容,这里在字符串python前面没有任何显示说明是相同的,显示的"-"说明删除后才会与第二个文件匹配,"!"表示第一个文件或者第二个文件需要修改才匹配。"+"是需要追加才会匹配。参数有很多,这里就不多举例了,有兴趣的可以自己看看。
对比目录
我在这里创建了两个目录,然后做对比
[root@www.wulaoer.org wulaoer]# ll wulaoer/ total 0 drwxr-xr-x. 2 root root 6 Apr 2 01:46 f drwxr-xr-x. 2 root root 6 Apr 2 01:46 g drwxr-xr-x. 2 root root 6 Apr 2 01:46 s drwxr-xr-x. 2 root root 6 Apr 2 01:46 w [root@www.wulaoer.org wulaoer]# mkdir wolf/{a,g,h,j} [root@www.wulaoer.org wulaoer]# diff wulaoer wolf Only in wolf: a Only in wulaoer: f Common subdirectories: wulaoer/g and wolf/g Only in wolf: h Only in wolf: j Only in wulaoer: s Only in wulaoer: w
这里显示的结果已经很明显了,两个目录下重复的是"g",其他的都不重复,每个目录的文件也都打印出来了,对比结果。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏