【Linux】【命令】diff

diff


|---|
| |

Descriptions


diff命令用于对比两个文件或者两个文件夹的不同之处,求基本语法如下所示:

cpp 复制代码
diff [OPTION]... FILES

Compare FILES line by line.【逐行对比】

FILES 可以有四种情况:① FILE1 FILE2;② DIR1 DIR2;③ DIR FILE...;④ FILE... DIR


|---|
| |

Arguments


一些常用的参数下表所示。

参数 作用
b 忽略所有空白字符的差别,包括制表符和空格
B 忽略空白行
u 统一格式输出,这种格式提供了一种更连续、更易读的显示方式
c 上下文格式输出,类似于 -u,但显示的上下文行数更多
i ignore-case,不检查大小写的不同
r 比较子目录中的文件
y 以并列的方式显示文件的异同之处
w 在使用 -y 参数时,指定栏宽
N 在比较目录时,如果文件在另一个文件中不存在,则认为文件内容为空
q 只报告文件是否相同,不显示具体的差异
s 如果文件相同则报告,否则以普通格式输出不同之处

|---|
| |

Examples


用于测试的原始文件


直接使用diff命令


只显示不同之处。

在这里,红色方框中的内容表示的是两个文件中不同之处所在的行号。例如,16c14 指的是第一个文件的 16 行和第二个文件的14行不同。

< 后面的是第一个文件(左边)中的内容,>对应的是第二个(右边)文件中的内容。

两个文件的 4,5 行是相同的,在这里就没有显示出来。


-u 输出格式


不同之处分别显示,并使用 + 和 - 标识不同的文件内容,相同之处则只显示一次。


-c 输出格式


显示两个文件中的所有内容,不同之处用 ! 标记。


并列输出


| 表示两个文件的不同之处,< 表示后面文件比前面文件少了1行内容,> 表示后面文件比前面文件多了一行内容


-s 和 -q


(test2 和 test 相同,test_1 和 test 不相同。)


|---|
| |

脚本示例


基于 diff 命令的一些脚本。


示例1:目录及文件差异


场景:团队中的 A 和 B 分别在自己的分支上开发新功能。当他们准备将各自的分支合并到主分支时,遇到了一些合并冲突。项目管理者要求他们提交各自分支与主分支的差异报告,以便进行代码审查和冲突解决。

任务:① 使用diff命令对比Alice和Bob的分支与主分支之间的所有文件差异;② 输出的报告应该包括哪些文件被修改、新增或删除,以及具体修改的内容;③ 生成的报告应该易于阅读,以便团队成员可以快速地识别关键信息。

实现

bash 复制代码
#!/bin/bash

# Define work directory
main_branch_dir="/path/to/main/branch"
feaure_branch_dir="/path/to/user/branch"
diff_report="diff_report.rpt"

# clear
>$diff_report

# Compare Directory
echo "Generating diff report between feature branch and main branch..." >> $diff_report
diff -urN $main_branch_dir $feaure_branch_dir >> $diff_report

# Report Difference
if[ $? -eq 0 ];then
echo "No differences found." >> $diff_report
else
echo "Differences found. See report below for details." >> $diff_report
fi

echo "Diff report generated at: $diff_report"

说明

  1. > 或者 >> 是将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)。

    > 是覆盖,>> 是追加。

    所以 >$diff_report 将一个空的内容以覆盖的方式写道一个文件中,就相当是于清空该文件。

  2. $?是上一条命令的返回值,或者说是命令的返回状态,0表示没有错误,其他任何值表明有错误。

  3. 使用>>的时候,echo命令指定的内容不会显示在 Terminal。所以这个脚本还可以优化,如果有差异,在 Termial 给出 rpt 的位置,如果没有差异,其实只显示结果就可以了。

  4. 如果只是想查看不同,vimdiff 其实更加方便,显示效果更好。但是 diff 可以用于脚本的编写。

相关推荐
身在江湖的郭大侠42 分钟前
Linux内核
linux·服务器
破-风3 小时前
linux的用法
linux·运维·服务器
涛ing6 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
__雨夜星辰__6 小时前
Linux 学习笔记__Day2
linux·服务器·笔记·学习·centos 7
大耳朵土土垚6 小时前
【Linux】日志设计模式与实现
linux·运维·设计模式
深度Linux11 小时前
Linux网络编程中的零拷贝:提升性能的秘密武器
linux·linux内核·零拷贝技术
chian-ocean15 小时前
从理论到实践:Linux 进程替换与 exec 系列函数
linux·运维·服务器
拎得清n15 小时前
UDP编程
linux
敖行客 Allthinker15 小时前
从 UTC 日期时间字符串获取 Unix 时间戳:C 和 C++ 中的挑战与解决方案
linux·运维·服务器·c++
夏尔Gaesar17 小时前
Vim安装与配置教程(解决软件包Vim没有安装可候选)
linux·编辑器·vim