zoukankan      html  css  js  c++  java
  • 文件/目录对比:diff命令

    命令格式

    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
  • 相关阅读:
    my first blog
    iFrame 父子窗口通讯
    关于手机端横屏竖屏问题
    IE环境规定div高度必须大于字体高度的问题
    adMob的旋转方法
    影响一个UIView是否能正常显示的几个因素
    iphone编译时的注意事项
    Cocos2d的字体生成软件Hiero v2.0 Bitmap Font Tool的一些问题
    编写Web前端代码的注意事项
    Cocos2d的SpriteSheet在多层图片时出现的问题
  • 原文地址:https://www.cnblogs.com/amyzhu/p/13466049.html
Copyright © 2011-2022 走看看