📜  Linux 中的 diff 命令及示例(1)

📅  最后修改于: 2023-12-03 15:32:41.083000             🧑  作者: Mango

Linux 中的 diff 命令及示例

在 Linux 中,diff 是一个非常重要的命令行工具,用于比较两个文本文件的差异。它可以显示两个文件的差异,并根据需要生成修改文件的补丁文件。

使用语法

diff 命令的语法如下:

diff [options] file1 file2

其中的 file1file2 是要比较的文件名。diff 命令会将整个文件逐行比较,然后输出有差异的行。

常见选项
  • -u:使用 unified 格式输出,显示两个文件的所有差异。这也是最常用的选项之一。
  • -i:忽略大小写。
  • -r:递归比较目录,并显示差异。
示例

以下是使用 diff 命令的一些示例:

示例 1:比较文件

下面的示例比较了两个名为 file1file2 的文件:

# 文件1
This is a test file.

It is used for testing purposes.

# 文件2
This is a test file.

It is used for debugging purposes.

命令:

diff file1 file2

输出:

2c2
< It is used for testing purposes.
---
> It is used for debugging purposes.

这个输出告诉我们,第二个文件中的第二行与第一个文件中的第二行不同。使用<表示第一个文件的行,>表示第二个文件的行。2c2表示第一个文件的第二行与第二个文件的第二行有差异。

示例 2:递归比较目录

下面的示例比较了两个目录 dir1dir2 中的所有文件:

# 目录1
- dir1
   - file1
   - file2
   - subdir1
      - file1

# 目录2
- dir2
   - file1
   - file3
   - subdir1
      - file2

命令:

diff -r dir1 dir2

输出:

Only in dir1: file2
Only in dir2: file3
diff -r dir1/subdir1/file1 dir2/subdir1/file2
2c2
< This is file1 in dir1/subdir1.
---
> This is file2 in dir2/subdir1.

这个输出告诉我们,file2 只存在于 dir1 中,file3 只存在于 dir2 中。此外,dir1/subdir1/file1dir2/subdir1/file2 也有差异。

示例 3:生成补丁文件

下面的示例使用 -u 选项,将差异输出到一个文件中:

# 文件1
This is a test file.

It is used for testing purposes.

# 文件2
This is a test file.

It is used for debugging purposes.

命令:

diff -u file1 file2 > patch-file

输出:

--- file1	2021-07-22 12:20:18.453620839 +0800
+++ file2	2021-07-22 12:20:29.201620874 +0800
@@ -1,4 +1,4 @@
 This is a test file.

-It is used for testing purposes.
+It is used for debugging purposes.

这个输出告诉我们,第一个文件的第三行与第二个文件的第三行有差异。使用 - 表示第一个文件的行,+ 表示第二个文件的行。在 @@ 行中,-1,4 表示第一个文件的第一行开始,共有四行,, 后面的 +1,4 表示第二个文件的第一行开始,共有四行。

补丁文件中的格式遵循 unified 格式,可以使用 patch 命令将补丁应用到文件中。