当前位置: 首页 > news >正文

Linux diffstat 命令详解

1. 命令简介

diffstat 是一个用于分析和可视化 diff 命令输出结果的统计工具。它读取 diff 命令生成的补丁文件或标准输入,并生成一个简洁的柱状图或统计摘要,用以展示文件变更的规模、类型(增加 / 删除)和分布情况。该工具常用于代码审查、版本变更分析等场景,帮助开发者快速把握代码库的修改范围。

2. 语法格式

bash

运行

diffstat [选项]... [文件]...

两种调用模式

管道模式(常用)将 diff 命令的输出通过管道传递给 diffstat

bash

运行

diff [diff选项] 文件1 文件2 | diffstat [diffstat选项]

文件模式直接读取已保存的 diff 输出文件

bash

运行

diffstat [选项] diff_output.txt

说明:

  • 不指定文件时,默认从标准输入 stdin 读取
  • 支持传入多个文件,自动合并所有统计结果

3. 常用选项及说明

表格

选项说明
-c添加 C 语言注释前缀/* */,可嵌入源码
-e将输出重定向到标准错误 stderr
-f <格式>设置输出格式:0 = 精简摘要、1 = 单行柱状、2 = 详细柱状、4=± 符号显示
-h查看简短帮助信息
-k合并文件名相同前缀,简化展示
-l仅列出变更文件名,不显示统计图表
-m将插入 / 删除合并统计为 “修改” 总数
-n <长度>设置文件名字段最小显示宽度
-p <长度>控制带路径文件名的显示宽度
-r <0-2>重命名检测级别:0 关闭、1 基础、2 积极
-s仅输出总计摘要,不展示单文件详情
-S <源>指定项目根目录,适配 git 子模块统计
-t纯文本表格输出,不绘制柱状图
-u隐藏输出中的文件名
-v / -V查看 diffstat 版本信息
-w <宽度>设置输出图形总宽度(默认 80 列)

4. 示例用法

4.1 基础用法:对比目录并统计差异

bash

运行

diff -u old_directory/ new_directory/ | diffstat

输出示例:

plaintext

file1.c | 5 ++++- file2.h | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-)

4.2 详细图形化输出

bash

运行

diff -u original.c modified.c | diffstat -f 2

输出示例:

plaintext

original.c | 12 ++++++++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)

4.3 读取本地 diff 补丁文件

bash

运行

diffstat -f 1 changes.diff

4.4 结合 Git 进行代码变更统计

bash

运行

# 统计未暂存变更 git diff --stat | diffstat -f 1 # 统计两次提交差异 git diff HEAD~1 HEAD | diffstat # 分支对比 + 表格输出 git diff branchA..branchB | diffstat -t

4.5 自定义输出宽度与文件名长度

bash

运行

diff -uR old/ new/ | diffstat -w 100 -n 50

4.6 仅快速列出变更文件

bash

运行

git show --pretty="" --name-only HEAD | diffstat -l

5. 注意事项

  1. 输入格式要求优先解析统一差异格式(diff -u /git diff),普通 diff 格式可能解析异常。

  2. 二进制文件处理可识别 diff 中的二进制文件标记,但不统计行数,仅统计文本文件变更。

  3. 重命名识别规则默认将删文件 + 增文件视为两次变更;-r 2可智能识别重命名,合并为一次修改。

  4. 性能限制超大 diff(上万文件)会消耗较多资源,建议先过滤文件再统计。

http://www.cnnetsun.cn/news/3272539.html

相关文章:

  • Oracle
  • 3分钟搞定B站缓存视频转换:m4s-converter完全指南
  • 智能时代官网Geo内容优化策略:构建AI可信赖的信息枢纽
  • 意念控制机器人:从脑机接口到远程意念指令的无限可能
  • Git 同步 Obsidian 和 Nutstore Sync 怎么选?两种方案的区别、适用场景和选择建议
  • 解密微信QQ防撤回:告别消息消失的终极方案
  • 海康摄像头RTSP流问题 method DESCRIBE failed: 401 Unauthorized
  • Alacritty配置优化:Catppuccin主题与其他工具的集成方案
  • Appium自动化测试入门:从环境搭建到第一个脚本编写
  • 如何为阿里云 Elasticsearch 创建推理端点,连接器,Workflow 并写入数据
  • OpenAI 推出 GPT-Live:告别回合制,AI 语音交互体验大升级!
  • ITIL 4 DPI认证信息整理
  • RimSort终极指南:告别《边缘世界》模组冲突的5个高效技巧
  • Typora绘制-用户旅程图
  • 私有化部署RustDesk中继服务器
  • 微软 Project Solara 展示 AI 工牌与智控中枢,卡片式 AI 硬件成手机外设新趋势
  • Reactive Resume深度调试指南:从模板渲染到容器部署的5大技术挑战
  • 前OpenAI安全副总裁翁荔新博客:AI自进化或先从Harness开始,揭示现实路径与瓶颈
  • Oracle EBS 12.2 审计追踪
  • EN 18031标准落地经验:联网无线电设备网络安全合规的关键节点与常见误区
  • AI 指标异动分析:先判断是业务事件还是数据 bug
  • ModelScope命令行工具终极实战:从零到精通的AI模型管理指南
  • MySQL学习第四天
  • 2026.7.8:2026年7月最新安装教程之docker compose 安装最新版neo4j
  • 多云架构下,Atlas 怎么统一管理证书生命周期?
  • 【久久派】LS2K0300 的 LoongOS 原装系统启动分析
  • AI 编程催生新商机:Slopfix 每周 1 万美元删 AI 生成代码引争议
  • 基于TPA3128D2与STM32F756ZG的高效D类音频放大器设计
  • Buzz:终极离线音频转录解决方案,让语音转文字变得简单高效
  • 如何用GBrain在30分钟内构建你的个人AI大脑:终极快速入门指南