diff - 比较文件和目录差异
diff 按行比较文本文件,也可以比较两个目录中对应文件的差异。
基本语法
diff [OPTIONS...] FILESdiff 没有发现差异时退出状态为 0,发现差异时为 1,发生错误时为 2。
常用参数
-u、--unified:输出统一格式,适合阅读和生成补丁。-c、--context:输出上下文格式。-y、--side-by-side:并排显示。-W COLUMNS、--width=COLUMNS:设置并排输出宽度。--suppress-common-lines:并排模式中不显示相同行。-i、--ignore-case:忽略大小写。-b、--ignore-space-change:忽略空白数量变化。-w、--ignore-all-space:忽略全部空白。-B、--ignore-blank-lines:忽略全空白行变化。-r、--recursive:递归比较目录。-x PATTERN、--exclude=PATTERN:排除匹配的文件或目录。-X FILE、--exclude-from=FILE:从文件读取排除模式。
比较文件
# 默认格式
diff before.txt after.txt
# 统一格式
diff -u before.txt after.txt
# 并排显示,只看不同的行
diff -y --suppress-common-lines before.txt after.txt生成补丁文件:
diff -u before.txt after.txt > change.patch应用补丁前应先检查内容,并保留原文件或版本控制记录。
比较目录
# 递归比较两个目录
diff -r directory_a directory_b
# 排除缓存目录
diff -r -x '.cache' directory_a directory_b-b 与 -w
-b忽略空白数量的变化,例如一个空格和多个空格。-w忽略全部空白差异,因此a b和ab也会被视为相同。
当空白具有语义时,例如 Python 缩进或模板内容,不应使用这些选项隐藏差异。
与 cmp 的区别
diff主要按行比较文本,适合阅读内容变化和生成补丁。- cmp 按字节比较,适合快速判断两个文件是否完全一致。