1. 命令概述
- 命令名称:
diffstat - 核心功能:读取
diff命令的输出结果,统计并显示差异的摘要信息 - 主要用途:快速查看补丁文件或
diff输出的变更统计,了解代码修改的规模
2. 语法格式
diffstat [选项] [文件...]
3. 常用选项
| 选项 | 说明 |
|---|---|
-c | 在输出中显示文件名 |
-e | 将标准错误输出重定向到文件 |
-f | 指定输出格式(0: 简洁, 1: 正常, 2: 详细) |
-k | 抑制合并信息 |
-m | 在输出中插入伪合并信息 |
-n | 指定文件名长度 |
-p | 在文件名前显示路径 |
-t | 覆盖模式 |
-u | 抑制排序 |
-v | 显示版本信息 |
-w | 指定输出宽度 |
-C | 添加注释 |
-D | 忽略目录差异 |
-F | 指定格式字符串 |
-H | 抑制头信息 |
-I | 忽略匹配模式 |
-N | 添加文件名 |
-O | 使用旧格式 |
-R | 反转补丁 |
-S | 查找源文件 |
-V | 显示版本信息 |
-W | 指定输出宽度 |
--help | 显示帮助信息 |
4. 输出格式说明
diffstat 的典型输出格式:
文件名 | 插入(+) 删除(-) 修改(!) 未修改(=)
符号说明:
+:新增的行数-:删除的行数!:修改的行数=:未修改的行数
5. 常用实例详解
(1) 基本用法:统计补丁文件的变更
# 生成补丁文件
diff -u old_file.txt new_file.txt > patch.diff
# 统计补丁文件的变更
diffstat patch.diff
# 输出示例:patch.diff | 5 + 3 - 0 ! 0 =
(2) 直接统计 diff 输出
# 直接统计 diff 命令的输出
diff -u old_file.txt new_file.txt | diffstat
# 输出示例:- | 5 + 3 - 0 ! 0 =
(3) 显示文件名
# 在输出中显示文件名
diffstat -c patch.diff
# 输出示例:old_file.txt => new_file.txt | 5 + 3 - 0 ! 0 =
(4) 指定输出格式
# 简洁格式(只显示数字)
diffstat -f 0 patch.diff
# 输出示例:5 3 0 0
# 详细格式
diffstat -f 2 patch.diff
# 输出示例:old_file.txt => new_file.txt | 5 insertions(+), 3 deletions(-), 0 modifications(!), 0 unchanged lines(=)
(5) 统计多个补丁文件
# 统计多个补丁文件的变更
diffstat patch1.diff patch2.diff patch3.diff
(6) 统计目录差异
# 生成目录差异补丁
diff -Naur old_dir/ new_dir/ > dir_patch.diff
# 统计目录差异
diffstat dir_patch.diff
6. 实际应用场景
场景一:代码审查前快速预览
# 生成当前修改的补丁
git diff > changes.patch
# 快速查看修改统计
diffstat changes.patch
# 输出示例:src/main.py | 15 + 8 - 2 ! 0 =
场景二:批量统计多个补丁
# 统计多个补丁的总变更
diffstat *.patch
# 输出示例:total | 45 + 23 - 5 ! 0 =
场景三:持续集成中的变更统计
# 在 CI 脚本中统计代码变更
git diff HEAD~1 HEAD | diffstat
# 输出示例:- | 12 + 6 - 0 ! 0 =
场景四:配置文件变更监控
# 监控配置文件变更
diff -u /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak | diffstat
# 输出示例:- | 3 + 1 - 0 ! 0 =
7. 与其他命令的组合使用
(1) 结合 find 命令
# 查找并统计所有补丁文件
find . -name "*.patch" -exec diffstat {} \;
(2) 结合 xargs 命令
# 批量统计多个补丁
ls *.patch | xargs diffstat
(3) 结合 git 命令
# 统计最近一次提交的变更
git show --stat
# 或使用 diffstat
git diff HEAD~1 HEAD | diffstat
8. 注意事项
- 输入格式:
diffstat需要标准的diff输出格式(如-u或-c选项生成的格式) - 二进制文件:
diffstat只统计文本文件的差异,不处理二进制文件 - 大文件:对于非常大的补丁文件,
diffstat处理速度很快 - 退出状态码:
diffstat总是返回 0,无法通过退出状态码判断是否有差异
核心要点总结:
diffstat用于统计diff输出的变更摘要- 输出格式:
文件名 | 插入(+) 删除(-) 修改(!) 未修改(=) - 常用选项:
-c(显示文件名)、-f(指定输出格式) - 主要用途:快速查看代码修改规模、补丁文件统计
- 常与
git diff、diff -u等命令配合使用 - 适合代码审查、持续集成、变更监控等场景