侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux diff命令详解:比较、输出和合并文件和目录(快速找出两个文件或目录的差异)

Linux diff命令介绍

diff是英文difference的缩写,它是一个常用的Linux命令,用于逐行比较两个文件或目录的内容,并显示它们之间的差异。diff命令可以帮助你找出文件之间的修改、添加或删除,并生成一个补丁文件,用于将一个文件更新为另一个文件。diff命令还可以比较目录中相同文件名的文件,但不会比较子目录¹。

适用的Linux版本

diff命令是GNU diffutils软件包的一部分,它在大多数Linux发行版中都是默认安装的。你可以使用diff --version命令来查看你的系统中安装的diff版本²。如果你没有安装diff,你可以使用以下命令来安装:

  • 在基于Debian或Ubuntu的系统中,使用sudo apt install diffutils命令。
  • 在基于Red Hat或CentOS的系统中,使用sudo yum install diffutils命令(CentOS 7或更低版本)或sudo dnf install diffutils命令(CentOS 8或更高版本)。
  • 在基于Arch Linux的系统中,使用sudo pacman -S diffutils命令。
[linux@bashcommandnotfound.cn ~]$ diff --version
diff (GNU diffutils) 3.7
...
[linux@bashcommandnotfound.cn ~]$ sudo apt install diffutils
...

Linux diff命令的基本用法

diff命令的基本语法格式如下:

diff [选项] 文件1 文件2

其中,文件1和文件2可以是普通文件或目录。选项可以用来控制diff命令的输出格式、比较方式和其他功能。如果不指定任何选项,diff命令会以默认格式显示两个文件之间的差异。

Linux diff命令的常用选项说明

diff命令有很多选项,可以根据不同的需求来使用。以下是一些常用选项的说明:

选项说明
-i忽略大小写差异
-b忽略空格数量差异
-B忽略空白行
-w忽略所有空格
-q只显示有无差异,不显示详细信息
-s如果没有发现任何差异,仍然显示信息
-y以并排方式显示文件的差异
-c显示上下文格式的差异
-u显示合并格式的差异
-r如果比较目录,递归比较子目录中的文件

Linux diff命令的实例

以下是一些使用diff命令的实例,你可以根据自己的需要进行修改和尝试。

比较两个文件

假设有两个文件file1.txt和file2.txt,它们的内容如下:

[linux@bashcommandnotfound.cn ~]$ cat file1.txt
Hello world!
This is a test file.
Goodbye!
[linux@bashcommandnotfound.cn ~]$ cat file2.txt
hello world!
This is a test file.
See you!

我们可以使用diff命令来比较它们:

[linux@bashcommandnotfound.cn ~]$ diff file1.txt file2.txt
1c1
< Hello world!
---
> hello world!
3c3
< Goodbye!
---
> See you!

输出结果中,第一行表示第一个文件(file1.txt)和第二个文件(file2.txt)在第一行(1)有差异,需要修改(c)。第二行表示第一个文件的内容,以<开头。第三行表示两个文件的分隔符,由---组成。第四行表示第二个文件的内容,以>开头。同理,第五行到第七行表示两个文件在第三行的差异。

忽略大小写差异

如果我们不想区分大小写,可以使用-i选项来忽略大小写差异:

[linux@bashcommandnotfound.cn ~]$ diff -i file1.txt file2.txt
3c3
< Goodbye!
---
> See you!

输出结果中,只显示了第三行的差异,因为第一行的大小写差异被忽略了。

以并排方式显示差异

如果我们想要以并排的方式显示两个文件的差异,可以使用-y选项:

[linux@bashcommandnotfound.cn ~]$ diff -y file1.txt file2.txt
Hello world!              | hello world!
This is a test file.        This is a test file.
Goodbye!                  | See you!

输出结果中,每一行都显示了两个文件的内容,中间用|分隔。如果两个文件在某一行内容相同,则没有|符号。

显示合并格式的差异

如果我们想要以合并的方式显示两个文件的差异,可以使用-u选项:

[linux@bashcommandnotfound.cn ~]$ diff -u file1.txt file2.txt
--- file1.txt    2023-10-24 15:07:59.000000000 +0800
+++ file2.txt    2023-10-24 15:08:09.000000000 +0800
@@ -1,3 +1,3 @@
-Hello world!
+hello world!
 This is a test file.
-Goodbye!
+See you!

输出结果中,前两行显示了两个文件的名称和修改时间。第三行显示了两个文件的比较范围,以@@开头和结尾。接下来的几行显示了两个文件的内容,以-开头的是第一个文件的内容,以+开头的是第二个文件的内容。

比较两个目录

假设有两个目录dir1和dir2,它们的结构如下:

[linux@bashcommandnotfound.cn ~]$ tree dir1 dir2
dir1
├── file1.txt
├── file2.txt
└── sub1
    └── file3.txt
dir2
├── file1.txt
├── file4.txt
└── sub2
    └── file5.txt

2 directories, 5 files

我们可以使用diff命令来比较它们:

[linux@bashcommandnotfound.cn ~]$ diff dir1 dir2
Only in dir1: file2.txt
Only in dir2: file4.txt
diff dir1/file1.txt dir2/file1.txt
1c1
< Hello world!
---
> hello world!
Only in dir1: sub1
Only in dir2: sub2

输出结果中,显示了两个目录中不同的文件和子目录。如果要递归比较子目录中的文件,可以使用-r选项:

[linux@bashcommandnotfound.cn ~]$ diff -r dir1 dir2
Only in dir1: file2.txt
Only in dir2: file4.txt
diff dir1/file1.txt dir2/file1.txt
1c1
< Hello world!
---
> hello world!
Only in dir1/sub1: file3.txt
Only in dir2/sub2: file5.txt

Linux diff命令的注意事项

  • diff命令只能比较文本文件或目录,不能比较二进制文件或压缩文件。
  • diff命令只能显示两个文件或目录之间的差异,不能直接修改或合并它们。如果要修改或合并文件,可以使用patch命令或其他工具。
0

评论区