> 文本处理与搜索 > diff

diff: 文件/目录差异比较指南

逐行比较两个目标的差异,并以易于阅读的格式(统一/上下文/并排)输出。广泛用于创建补丁、代码审查和比较配置更改。

概述

diff 比较两个文件或目录的更改,显示哪些行被添加/删除/修改。输出格式可以选择统一(unified)、上下文(context)、并排(side-by-side)等,并且可以调整比较敏感度,例如忽略空格或大小写。

主要特点

  • 提供逐行比较和易于阅读的格式
  • 支持目录间递归比较 (-r)
  • 多种忽略规则,如空格/大小写/空行
  • 支持适合生成补丁(.patch)的统一格式(-u)
  • 提供大文件比较性能优化选项

应用场景示例

  • 代码审查:仅提取更改的文件作为补丁
  • 跟踪配置文件更改:比较部署前后的配置
  • 比较备份/快照:查看特定时间点之间的差异
  • 在文档/数据预处理阶段检测意外更改
  • 安全检查:确认外部部署的二进制文件/脚本的可疑更改

diff 输出格式

diff 的输出格式表示将第一个文件更改为第二个文件的指令。

  • `a` (add): 第一个文件中没有的行在第二个文件中**添加**了。(例如: `1a2`)
  • `c` (change): 两个文件中相应的行都**更改**了。(例如: `1c2`)
  • `d` (delete): 第一个文件中的行在第二个文件中**删除**了。(例如: `1d2`)

主要选项

根据目的将常用选项进行了分组。

1) 基本操作与输出格式

2) 指定比较范围/目标

3) 输出控制/忽略规则

4) 帮助/版本

生成的命令:

请尝试组合命令。

描述:

`diff` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

使用示例

整理了常用的比较场景示例。

以统一格式生成补丁

diff -u old.conf new.conf > change.patch

目录递归比较

diff -ruN ./v1 ./v2

忽略空格差异进行比较

diff -uw src_old.c src_new.c

并排显示 + 隐藏共同行

diff -y --suppress-common-lines a.txt b.txt

退出代码

在脚本中进行分支处理时请参考。

diff 退出状态码
代码 含义
0 两个目标相同
1 存在差异
2 发生错误(用法错误/文件无法访问等)

安装

大多数发行版默认包含,如果缺失请安装 diffutils 包。

Debian/Ubuntu

sudo apt update && sudo apt install -y diffutils

RHEL/CentOS/Fedora

sudo dnf install -y diffutils

Arch Linux

sudo pacman -S --needed diffutils

openSUSE

sudo zypper install -y diffutils

提示与注意事项

现场常被忽视的要点。

  • 补丁格式通常使用 -u 作为标准。Git 内部也使用类似的统一格式。
  • 滥用空格处理选项(-w, -b, -B)可能会掩盖实际有意义的更改。
  • 通过 --strip-trailing-cr 规范化 Windows/Linux 换行符差异,可以使比较更顺畅。
  • 比较目录时,结合使用 -r 和 -x/-X(排除规则)来过滤掉不必要的文件。
  • 如果只想快速确认是否存在,请使用 -q 选项。它不会输出详细内容。

相关命令

功能上相似或经常一起使用的命令。


相同类别命令