命令格式

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. 【UE4 设计模式】组件模式 Components Pattern

    概述 描述 在单一实体跨越了多个领域时,为了保持领域之间相互解耦,可以将每部分代码放入各自的组件类中,将实体简化为组件的容器. 套路 参考 UE4中的 Componet 组件使用方式 使用场景 有一个 ...

  2. Java:LinkedList类小记

    Java:LinkedList类小记 对 Java 中的 LinkedList类,做一个微不足道的小小小小记 概述 java.util.LinkedList 集合数据存储的结构是循环双向链表结构.方便 ...

  3. 记一个非常诡异的关于 shared_ptr 的 bug

    问题描述 今天写项目的时候遇见一个特别诡异的 bug,体现在在执行某条语句时,程序会莫名崩溃,并且给出的错误信息也非常难懂,只有一个malloc(): invalid size (unsorted)错 ...

  4. sip信令跟踪工具sngrep

    概述 在VOIP的使用过程中,最常见的问题就是信令不通和语音质量问题. 通常的问题跟踪手段包括日志分析.抓包分析. 抓包的工具有wireshark.tcpdump等等,如果是只针对sip信令的抓包,则 ...

  5. Seata的一些概念

    Seata的一些概念 一.什么是seata 二.AT模式的介绍 1.前提条件 2.整体机制 3.读写隔离的实现 1.写隔离 2.读隔离 三.事务分组 1.事务分组是什么? 2.通过事务分组如何找到后端 ...

  6. mysql的一些配置操作

    mysql的一些配置操作 一.背景 二.mysql配置 三.慢查询日志 1.命令行临时生效 2.配置文件修改永久生效 3.慢查询日志解释 4.mysqldumpdlow查看慢查询日志 四.查看索引为何 ...

  7. CSP-S2021幽寂

    不管怎么说,这次比赛考的比这一段时间以来的模拟赛都难看 难受,但是也不想太表现出来,所以更难受.... 有点害怕会退役...... Day -6 前一天晚上回宿舍的时候和\(zxs\)一路,聊的过程中 ...

  8. DeWeb配置SSL的方法,未亲测,供参考

    DeWeb配置SSL的方法1.购买域名的服务商申明免费的SSL证书,然后证书类型下载选择Nginx2.下载Nginx,http://nginx.org/download/nginx-1.20.0.zi ...

  9. Java测试开发--Java基础知识(二)

    一.java中8大基本类型 数值类型:byte.short.int .float.double .long 字符类型:char 布尔类型:boolean 二. 封装:将属性私有化,不允许外部数据直接访 ...

  10. 通过大量实战案例分解Netty中是如何解决拆包黏包问题的?

    TCP传输协议是基于数据流传输的,而基于流化的数据是没有界限的,当客户端向服务端发送数据时,可能会把一个完整的数据报文拆分成多个小报文进行发送,也可能将多个报文合并成一个大报文进行发送. 在这样的情况 ...