首页 服务器系统 Linux

Linux系统之diff详解及演示(文件比较)


一、背景说明

对应Linux系统来说,我们经常要比较两个文件的差异,这时候就要用到比较工具了,今天介绍一个比较工具命令:diff

二、diff命令的定义和作用

diff命令是一种用于比较两个文件之间差异的工具。这个命令可以帮助我们找出两个文本文件的不同之处,并将它们以可读的形式呈现出来。

如果指定的比较对象是目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

三、diff语法格式

在Linux系统中,diff命令的语法格式如下:

diff [选项] FILES

说明:FILES 可以是文件,也可以是目录; 'FILE1 FILE2' or 'DIR1 DIR2'

常用选项参数:

  • -a  diff预设只会逐行比较文本文件。
  • -b  不检查空格字符的不同。
  • -B  不检查空白行。
  • -c  显示全部内文,并标出不同之处。
  • -H  比较大文件时,可加快速度。
  • -i  不检查大小写的不同。
  • -l  将结果交由pr程序来分页。
  • -N 在比较目录时,若文件A仅出现在某个目录中,预设会显示:
  • -q  仅显示有无差异,不显示详细的信息。
  • -r  比较子目录中的文件。
  • -S<文件>  在比较目录时,从指定的文件开始比较。
  • -w  忽略全部的空格字符。
  • -y  以并列的方式显示文件的异同之处。

四、diff命令的实例演示

演示文件

4.1 比较两个文件并输出不同

4.1.1 正常比较

[root@wangzy diff]# diff wangzy01.txt wangzy02.txt 
2c2
< 2. basedir = /opt/mysql
---
> 2. basedswir = /opt/mysql
6d5
< 
10a10,12
> 
> echo "start"
> 
[root@wangzy diff]# 

输出说明;
2c2 表示两个文件在 第二行 内容不一致,即对文件一来说文件二有修改操作
6d5 表示文件一比文件二多了第6行,即对文件一来说文件二有删除操作
10a10,12 表示文件二比文件一多了第12行,即对文件一来说文件二多了附加操作

说明:

比较时会出现字母a、d和c,字母之前的行号是针对file1 的, 字母之后的行号是针对 file2 的。 字母 a、d 和 c 分别表示附加、删除和修改操作。

以 “<” 打头的行属于第一个文件, 以 “>” 打头的行属于第二个文件。

4.1.2 忽略大小写

把 测试文件一里面的 log-error 改成 Log-error 后测试


4.2 递归比较两个目录中的所有文件

[root@wangzy diff]# ls 
mysql  mysql-bak  wangzy01.txt  wangzy02.txt
[root@wangzy diff]# 
[root@wangzy diff]# ls mysql
conf  data  docker-compose.yml  src  start-mysql.sh  yj-mysql-v5.6.27.tar
[root@wangzy diff]# 
[root@wangzy diff]# ls mysql-bak/
conf  data         style="height: auto;"/>

4.3 将比较结果输出到文件中

[root@wangzy diff]# diff wangzy01.txt wangzy02.txt > diffrent.txt
[root@wangzy diff]# 
[root@wangzy diff]# cat diffrent.txt 
2c2
< 2. basedir = /opt/mysql
---
> 2. basedswir = /opt/mysql
6d5
< 
10a10,12
> 
> echo "start"
> 
[root@wangzy diff]# 

相关推荐