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

相关推荐
AZ996ZA7 小时前
自学linux第十八天:【Linux运维实战】系统性能优化与安全加固精要
linux·运维·安全·性能优化
大虾别跑7 小时前
OpenClaw已上线:我的电脑开始自己打工了
linux·ai·openclaw
weixin_437044648 小时前
Netbox批量添加设备——堆叠设备
linux·网络·python
hhy_smile8 小时前
Ubuntu24.04 环境配置自动脚本
linux·ubuntu·自动化·bash
宴之敖者、8 小时前
Linux——\r,\n和缓冲区
linux·运维·服务器
LuDvei8 小时前
LINUX错误提示函数
linux·运维·服务器
未来可期LJ8 小时前
【Linux 系统】进程间的通信方式
linux·服务器
Abona8 小时前
C语言嵌入式全栈Demo
linux·c语言·面试
Lenyiin9 小时前
Linux 基础IO
java·linux·服务器
The Chosen One9859 小时前
【Linux】深入理解Linux进程(一):PCB结构、Fork创建与状态切换详解
linux·运维·服务器