📅  最后修改于: 2023-12-03 15:32:41.083000             🧑  作者: Mango
在 Linux 中,diff
是一个非常重要的命令行工具,用于比较两个文本文件的差异。它可以显示两个文件的差异,并根据需要生成修改文件的补丁文件。
diff
命令的语法如下:
diff [options] file1 file2
其中的 file1
和 file2
是要比较的文件名。diff
命令会将整个文件逐行比较,然后输出有差异的行。
-u
:使用 unified
格式输出,显示两个文件的所有差异。这也是最常用的选项之一。-i
:忽略大小写。-r
:递归比较目录,并显示差异。以下是使用 diff
命令的一些示例:
下面的示例比较了两个名为 file1
和 file2
的文件:
# 文件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
表示第一个文件的第二行与第二个文件的第二行有差异。
下面的示例比较了两个目录 dir1
和 dir2
中的所有文件:
# 目录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/file1
与 dir2/subdir1/file2
也有差异。
下面的示例使用 -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
命令将补丁应用到文件中。