自学内容网 自学内容网

【Linux】【命令】diff


Descriptions


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

diff [OPTION]... FILES

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

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


Arguments


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

参数作用
b忽略所有空白字符的差别,包括制表符和空格
B忽略空白行
u统一格式输出,这种格式提供了一种更连续、更易读的显示方式
c上下文格式输出,类似于 -u,但显示的上下文行数更多
iignore-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的分支与主分支之间的所有文件差异;② 输出的报告应该包括哪些文件被修改、新增或删除,以及具体修改的内容;③ 生成的报告应该易于阅读,以便团队成员可以快速地识别关键信息。

实现

#!/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 可以用于脚本的编写。


原文地址:https://blog.csdn.net/Tranquil_ovo/article/details/142765204

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!