命令
diff
描述
compare files line by line
比较两个文件
用法
选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Options: -q 如果两个文件内容不同,则显示不同结果differ,但不显示详情 -s 如果两个文件内容相同,则显示相同结果identical,但不显示详情,推荐和-q选项合并使用 -y 并列显示两个文件内容,并标记不同的行 -W 配合-y使用,指定并列显示的宽度,默认为130 --left-column 配合-y使用,相同的行只在左侧显示 --suppress-common-lines 配合-y使用,只显示不同的行 -u 显示统一diff格式,用于生成补丁文件 -r 比较两个目录时,递归比较子目录 -i 忽略大小写 -E 忽略tab键 -Z 忽略行尾的空格 -b 忽略连续的空格 -w 忽略所有空格 -B 忽略空白行
|
注意
diff命令生成补丁文件的时候,两个文件的位置很重要,以第二个文件为准,如果两个文件颠倒的话,会生成反向补丁文件
patch命令会自动检查补丁文件,如果是反向文件会提示Reversed (or previously applied) patch detected!
,输入y即可自动反向合并
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| $ more a
a=3 echo aaa echo $a mkdir dir1 $ more b
a=4 echo aaa echo $a mkdir dir2 mkdir -p dir/dir3 $ diff a b 1c1 < --- > 3c3 < a=3 --- > a=4 7c7,8 < mkdir dir1 --- > mkdir dir2 > mkdir -p dir/dir3
$ diff -sq old new Files old and new differ $ cp old old1 $ diff -sq old old1 Files old and old1 are identical $ diff -y -W 50 a b
a=3 | a=4 echo aaa echo aaa echo $a echo $a mkdir dir1 | mkdir dir2 > mkdir -p dir/dir3 $ diff -y -W 50 --left-column a b
a=3 | a=4 echo aaa ( echo $a ( mkdir dir1 | mkdir dir2 > mkdir -p dir/dir3 $ diff -y -W 50 --suppress-common-lines a b
a=3 | a=4 mkdir dir1 | mkdir dir2 > mkdir -p dir/dir3
$ more old
a=3 echo aaa echo $a mkdir dir1 $ more new
a=4 echo aaa echo $a mkdir dir2 mkdir -p dir/dir3
$ diff -u old new > new.diff $ more new.diff --- old 2021-01-22 16:29:32.332851863 +0800 +++ new 2021-01-22 16:26:54.598089038 +0800 @@ -1,6 +1,7 @@ - - -a=3 + + +a=4 echo aaa echo $a -mkdir dir1 +mkdir dir2 +mkdir -p dir/dir3
$ patch old < new.diff patching file old $ more old
a=4 echo aaa echo $a mkdir dir2 mkdir -p dir/dir3 $ diff old new
$ mkdir dir1 dir2 $ echo aa > dir1/aa $ echo bb > dir2/bb $ echo a1 > dir1/cc $ echo b1 > dir2/cc $ tree dir1 dir2 dir1 ├── aa └── cc dir2 ├── bb └── cc
$ diff dir1 dir2 Only in dir1: aa Only in dir2: bb diff dir1/cc dir2/cc 1c1 < a1 --- > b1
|