命令格式

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. Less-25 preg_replace2

    Less-25: 核心语句: 各种回显也均有. 通过blacklist,我们可以发现,本题屏蔽了and和or. preg_replace函数中正则表达式后面的i是一个修饰符,代表正则匹配时不区分大小写 ...

  2. 【UE4】GamePlay架构

    新标签打开或者下载看大图 更新: 增加 编程子系统 Subsystem 思维导图 Character pipeline

  3. 【UE4 C++ 基础知识】<15> 智能指针 TSharedPtr、UniquePtr、TWeakPtr、TSharedRef

    基本概念 UE4 对 UObject 对象提供垃圾回收 UE4 对原生对象不提供垃圾回收,需要手动进行清理 方式 malloc / free new / delete new与malloc的区别在于, ...

  4. [对对子队]会议记录4.17(Scrum Meeting8)

    今天已完成的工作 何瑞 ​ 工作内容:修复了一些bug,优化了UI ​ 相关issue:搭建关卡1 ​ 相关签入:4.17签入1 吴昭邦 ​ 工作内容:做了一些流水线系统的错误处理,添加了合成失败了之 ...

  5. 【二食堂】Beta - Scrum Meeting 4

    Scrum Meeting 4 例会时间:5.17 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 继续完成文本区域划词添加的功能 issue 1. 划词功能已经实现,继续开发 ...

  6. (三)、Docker常用基础命令

    1.Docker 帮助命令 帮助命令: docker version 查看版本 docker info 查询docker详细信息 docker --help 查看命令帮助 2.Docker 镜像命令 ...

  7. Openeuler安装完整man手册

    Openeuler安装完整man手册 ​ 在 Debian 和 Ubuntu 中安装了Shell 前端软件包管理器apt(Advanced Packaging Tool),可以通过如下方式安装. ​ ...

  8. Android Studio 查看SQLite数据库存储位置及文件

    前言: 之前开发的一个记账本APP,用的是SQLite数据库,会有一些网友问如何查看数据库,这篇博文对此进行一个说明. 操作: 1.通过DDMS(Dalvik Debug Monitor Servic ...

  9. Java不同时区(timezone)之间时间转换

    最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间. 一.关于时区的一些概 ...

  10. uni-app视频组件设置圆角

    无法实现,建议写个image在中间位置加个播放按钮,点击播放跳转新页面只需要在跳转参数里面把视频链接加上,在onLoad里面获取视频链接,自动播放视频,很多app目前都是这样做的,关闭页面后视频会自动 ...