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

相关推荐
Starry_hello world15 分钟前
Linux 的准备工作
linux·笔记·有问必答
_考不上研究生不改名1 小时前
【完美解决】VSCode连接HPC节点,已配置密钥却还是提示需要输入密码
linux·服务器·vscode·远程连接·hpc·超算集群
_长银2 小时前
Vim搜索和替换
linux·编辑器·vim
爱的叹息3 小时前
Spring Boot 自定义配置类(包含字符串、数字、布尔、小数、集合、映射、嵌套对象)实现步骤及示例
java·linux·spring boot
嵌入式-老费4 小时前
Linux上位机开发实践(一个硬件算法加速的示例)
linux·运维·服务器
前进的程序员4 小时前
Linux C 与 C 语言的区别及开发差异
linux·运维·c语言
CZIDC4 小时前
华为昇腾服务器上查看固件、驱动和CANN版本的常用方法
linux·运维·服务器
良许Linux5 小时前
C++在嵌入式中表现如何?
linux
林政硕(Cohen0415)6 小时前
Linux驱动开发进阶(七)- DRM驱动程序设计
linux·驱动开发·drm
良许Linux6 小时前
能详细地讲讲stm32该怎么学吗?
linux