patch 和 diff 命令的使用

Linux 常用命令使用记录

Posted by Nicodechal on 2020-12-26

diff 命令

此用于比较两个目录或文件的差异,并输出他们之间的差异,差异可以理解为一系列的操作,对于源文件 A 和目标文件 B,使用 diff 结果描述的操作(对 A 文件增删改操作)后,可以将 A 文件内容修改到和 B 一致。使用下面命令输出 A 和 B 之间的差异:

1
2
3
diff A B # 输出 A 文件和 B 文件的差异。
diff -r A B # 输出 A *文件夹* 和 B 文件夹的差异
diff -Naur A B # 输出 A *文件夹* 和 B 文件夹的差异,-N 指定新添加文件也计算差异。

patch 命令

patch 可以将 diff 产生的差异应用到执行的目录。

1
patch < file.patch # 在当前目录下执行差异

关于 -p 参数,他会根据后面的数字忽略 diff 的目录层级,-p2 表示截掉层级前缀到第二个 /

1
2
3
patch -p0 # diff A/AA/AAA B/BB/BBB => diff A/AA/AAA B/BB/BBB
patch -p1 # diff A/AA/AAA B/BB/BBB => diff AA/AAA BB/BBB
patch -p2 # diff A/AA/AAA B/BB/BBB => diff AAA BBB

例如当前文件夹 /home/test,对于 diff A/AA/AAA B/BB/BBB 的结果:

  1. 如果 /home/test/B/BB/BBB 存在,直接尝试应用。否则:
  2. 如果 /home/test/A/AA/AAA 存在,尝试应用到 A。

如果使用了 -p 参数,就先截断,再按照上述过程判断应用。

参考资料

How to Apply a Patch to a File (and Create Patches) in Linux