Linux常用命令学习笔记:diffstat

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. 注意事项

  1. 输入格式diffstat 需要标准的 diff 输出格式(如 -u 或 -c 选项生成的格式)
  2. 二进制文件diffstat 只统计文本文件的差异,不处理二进制文件
  3. 大文件:对于非常大的补丁文件,diffstat 处理速度很快
  4. 退出状态码diffstat 总是返回 0,无法通过退出状态码判断是否有差异

核心要点总结

  • diffstat 用于统计 diff 输出的变更摘要
  • 输出格式:文件名 | 插入(+) 删除(-) 修改(!) 未修改(=)
  • 常用选项:-c(显示文件名)、-f(指定输出格式)
  • 主要用途:快速查看代码修改规模、补丁文件统计
  • 常与 git diffdiff -u 等命令配合使用
  • 适合代码审查、持续集成、变更监控等场景

作 者:南烛
链 接:https://www.itnotes.top/archives/219
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇