远看高低各不同 diff
.. note::
草色烟光残照里,无言谁会凭阑意
宋代 柳永《蝶恋花·伫倚危楼风细细》
Linux diff
命令用于比较文件的差异。
当然还有很多比较文件的专业工具,但是如果在Linux命令行,这个是最原始最初的,也是开机即用的。
官方定义为:
GNU diff - compare files line by line
diff
会以逐行的方式,比较文本文件的不同。
如果指定要比较目录,则 diff
会比较目录中相同文件名的文件,但不会比较其中子目录。
语法
1 | $ diff [OPTION]... FILES |
参数:
-c
显示所有内容,并标出不同之处。-u
以合并的方式来显示文件内容的不同。-y
或--side-by-side
两列输出显示文件的异同之处。
假定有两个文件a和b,内容分别为:
1 | $ cat a |
默认比较两个文件
默认情况下,直接输入下面命令即可:
1 | $ diff a b |
可以看到1,2c1,2,中间有一个字母c;3a4,中间有一个字母a。
那么a和c什么含义呢,中间的字母表示需要在第一个文件上做的操作(a=add,c=change,d=delete),然后才有后面的文件一致。
所以1,2c1,2表示1,2行更换后一致;3a4表示,增加一行后一致。
并排显示方便比较
这种方式相对而言,就很亲民了,左右两边两列方便比对。
1 | $ diff a b -y |
那么:
“|”表示前后2个文件内容有不同;
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容
context模式比较
这种模式会输出所有的文件内容,并显示不同之处,还包括具体的时间。
如下***
表示a的内容,---
表示b的内容。
1 | $ diff a b -c |
unified模式比较
这种模式会混合输出所有的文件内容,并显示不同之处,还包括具体的时间。
如下---
表示a的内容,+++
表示b的内容。
1 | $ diff a b -u |
对比时忽略空格
1 | # diff -w name_list.txt name_list_new.txt |
快速找出两个目录的不同
diff命令会按行比较文件。但是它也可以比较两个目录:
1 | ls -l /tmp/r |