命令格式

diff [参数] [文件1或目录1] [文件2或目录2]

Linux diff命令用于比较文件的差异。

  • diff以逐行的方式,比较文本文件的异同处。
  • 如果指定要比较目录,diff会比较目录中相同文件名的文件,但不会比较其中子目录。
  • diff程序的输出被称为补丁(patch),Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c
    • 打补丁:patch file patch.log

命令参数

参数 描述
-行数 指定要显示多少行的文本。此参数必须与-c或者-c参数一并使用。
-a 或者--text,diff预设只会逐行比较文本文件
-b 或--ignore-space-change ,不检查空格字符的不同。
-B 或--ignore-blank-lines ,不检查空白行。
-c 显示全部内容,并标出不同之处
-C行数 或--context行数 与执行"-c-行数"指令相同。
-i 或--ignore-case ,不检查大小写的不同。
-p 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称
-N 或--new-file ,在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-P 或--unidirectional-new-file ,与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。
-r 比较子目录中的文件
-v 显示版本信息
-w 或--ignore-all-space , 忽略全部的空格字符。
-W 或--width , 在使用-y参数时,指定栏宽。
-x 或--exclude , 不比较选项中所指定的文件或目录。
-X 或--exclude-from , 您可以将文件或目录类型存成文本文件,然后在=中指定此文本文件。
-y 或--side-by-side ,以并列的方式显示文件的异同之处。
--left-column 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。
--suppress-common-lines 在使用-y参数时,仅显示不同之处。

具体使用

默认格式的diff:diff file1 file2

2c2
< world
---
> world2
3a4
> hell
5d5
< river
  • 它分成三个部分:前面的"4",表示f1的第4行有变化;中间的"c"表示变动的模式是内容改变(change),其他模式还有"增加"(a,代表addition)和"删除"(d,代表deletion);后面的"4",表示变动后变成f2的第4行。
  • c:change,内容改变
  • a:addition,增加
  • d:deletion,删除
  • ---用于分割f1和f2

上下文格式的diff:diff file1 file2 -c

-> autotest-runtask diff 1.txt 2.txt  -c
*** 1.txt 2020-08-09 18:09:24.000000000 +0800
--- 2.txt 2020-08-09 18:09:10.000000000 +0800
***************
*** 1,5 ****
hello
! world
goodbye
moutain
- river
--- 1,5 ----
hello
! world2
goodbye
+ hell
moutain

结果分成四部分:

  • 第一部分的两行,显示两个文件的基本情况:文件名和时间信息

    • *** 表示变动前的文件
    • --- 表示变动后的文件
  • 第二部分:15个星号,将文件的基本情况和变动内容分割开
  • 第三部分:显示变动前的文件
    • 1,5,表示行号
    • 文件内容的每一行最前面,还有一个标记位:
      • 空:无变化;
      • !:该行有改动;
      • -:该行被删除;
      • +:该行新增
  • 第四部分:显示变动后的文件

合并格式的diff:diff file1 file2 -u

➜  autotest-runtask diff 1.txt 2.txt  -u
--- 1.txt 2020-08-09 18:09:24.000000000 +0800
+++ 2.txt 2020-08-09 18:09:10.000000000 +0800
@@ -1,5 +1,5 @@
hello
-world
+world2
goodbye
+hell
moutain
-river
  • 第一部分:文件基本信息
  • 第二部分:变动的部分用两个@@作为起首和结束
    • -:表示第一个文件;+表示第二个文件
  • 第三部分:变动的具体内容

并排格式的diff:diff file1 file2 -y

➜  autotest-runtask diff 1.txt 2.txt -y
hello hello
world | world2
goodbye goodbye
> hell
moutain moutain
river <
  • |:表示前后2个文件内容有不同

  • <:表示前面文件比后面文件多了1行内容

  • >:表示前面文件比后面文件少了一行内容

比较目录:diff 目录1 目录2

  • 只显示不同行:diff -r 目录1 目录2 -y --suppress-common-lines

文件/目录对比:diff命令的更多相关文章

  1. Linux文件/目录权限设置命令:chmod

    文件/目录权限设置命令:chmod 这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限.该命令有两种用法: 用包含字母和操作符表达式的文字设定法 其语法格式为:chmod [w ...

  2. Linux 文本对比 diff 命令详解(整理)

    diff 命令详解 1.概述 windows系统下面就有不错的文本对比工具可以使用,例如常用的Beyond Compare,WinMerge都是图形界面的比较工具而且使用非常方便,如果你仅仅是在win ...

  3. linux 比较两个文件夹不同 (diff命令, md5列表)

    比较文件夹diff,可以直接使用diff命令 [root@~]# diff -urNa dir1 dir2 -a Treat all files as text and compare them li ...

  4. Linux的文件/目录的权限

    文件类型 权限 属主 属组 目录名/文件名drwx------ 2 alice girls 4096 9月 25 11:33 alicedrwx------ 2 rose girls 4096 9月 ...

  5. Linux 文件/目录操作详解

    目录 Linux 文件/目录操作详解 初识Linux 一.文件/目录显示命令 ls 二.目录创建命令 mkdir 三.目录转移命令 cd 四.当前目录显示命令 pwd 五.文件处理命令 rmdir 六 ...

  6. [C/C++][文件操作] 对比目录并列出同名较新文件、较旧文件 0.1

    主要是模仿robocopy的部分功能 (robocopy /L 参数可以列出本地目录和备份目录中的异同之处,主要是标记出:较新的.较旧的.多出的文件 ) 现在还不会写GUI,打算后面自己做目录树dif ...

  7. 基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目

    自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...

  8. Linux 150命令之查看文件及内容处理命令 more split file diff paste wc dps2unix

    more命令 使用more命令显示more /var/log/boot.log-20171129文件,可以从图中看出,系统在显示满一个屏幕时暂停,使用空格可以翻页,使用Q键可以退出. split sp ...

  9. Linux文件与目录操作 ls 命令(2)

    说文件操作是最频繁地操作也不为过,在Linux中,使用ls命令可以列出当前目录中所有内容,本篇就先说说ls命令.本文所说的文件指文件和目录. ls命令常用选项 -a:显示指定目录下所有子目录与文件,包 ...

随机推荐

  1. [no code][scrum meeting] Beta 2

    例会时间:5月14日11:30,主持者:乔玺华 下次例会时间:5月15日11:30,主持者:肖思炀 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 - 开issue,分配时间 黎正宇 - ...

  2. stm32f103中断学习总结

    一.NVIC 介绍 NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功 ...

  3. Exynos4412 中断处理流程详解

    Linux 中,当外设触发中断后,大体处理流程如下: a -- 具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler; b - ...

  4. 该如何有效的提高C/C++语言编程能力

    很多答案都谈到算法的重要性,我的答案主要集中在C++上,只是一些个人经验. 其实我以前也有这样的困惑,感觉完了不知道怎么用.而且我也不是学计算机的,也没有从事相关工作,所以大概有十年的时间都没写什么程 ...

  5. 神经网络 感知机 Perceptron python实现

    import numpy as np import matplotlib.pyplot as plt import math def create_data(w1=3,w2=-7,b=4,seed=1 ...

  6. hdu 2200 Eddy's AC难题(简单数学。。)

    题意: N个人,每个人AC的题数都不一样. Eddy想从中选出一部分人(或者全部)分成两组.必须满足第一组中的最小AC数大于第二组中的最大AC数. 问共有多少种不同的选择方案. 思路: 简单数学.. ...

  7. JMeter学习记录收藏

    1.如何进行一个简单的性能测试 2.JMeter各种功能名词解释,比较全 3.聚合报告分析 4.CSV文件参数化,名词解释 5.JMeter快捷键

  8. PyCharm Django Python 开发环境配置 详细教程

    PyCharm Django Python 开发环境配置 详细教程 1. Python 下载及安装 (1)根据需要的版本去 Python 官网(https://www.python.org/downl ...

  9. Java测试开发--sts安装Lombok(七)

    1.sts安装Lombok的步骤: 下载最新的lombok.jar包,进入cmd窗口,切到Lombok下载的目录,运行命令: java -jar lombok.jar,会出现如下界面: 已经默认选好了 ...

  10. mysql8版本以上重置密码

    1.打开命令窗口cmd,输入命令:net stop mysql,停止MySQL服务, 2.开启跳过密码验证登录的MySQL服务, 输入命令 : mysqld --console --skip-gran ...