diff.1 (11347B)
1 .\" $OpenBSD: diff.1,v 1.43 2014/02/13 14:52:53 jmc Exp $ 2 .\" 3 .\" Copyright (c) 1980, 1990, 1993 4 .\" The Regents of the University of California. All rights reserved. 5 .\" 6 .\" Redistribution and use in source and binary forms, with or without 7 .\" modification, are permitted provided that the following conditions 8 .\" are met: 9 .\" 1. Redistributions of source code must retain the above copyright 10 .\" notice, this list of conditions and the following disclaimer. 11 .\" 2. Redistributions in binary form must reproduce the above copyright 12 .\" notice, this list of conditions and the following disclaimer in the 13 .\" documentation and/or other materials provided with the distribution. 14 .\" 3. Neither the name of the University nor the names of its contributors 15 .\" may be used to endorse or promote products derived from this software 16 .\" without specific prior written permission. 17 .\" 18 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 .\" SUCH DAMAGE. 29 .\" 30 .\" @(#)diff.1 8.1 (Berkeley) 6/30/93 31 .\" 32 .Dd $Mdocdate: February 13 2014 $ 33 .Dt DIFF 1 34 .Os 35 .Sh NAME 36 .Nm diff 37 .Nd differential file and directory comparator 38 .Sh SYNOPSIS 39 .Nm diff 40 .Op Fl abdilpTtw 41 .Oo 42 .Fl c | e | f | 43 .Fl n | q | u 44 .Oc 45 .Op Fl I Ar pattern 46 .Op Fl L Ar label 47 .Ar file1 file2 48 .Nm diff 49 .Op Fl abdilpTtw 50 .Op Fl I Ar pattern 51 .Op Fl L Ar label 52 .Fl C Ar number 53 .Ar file1 file2 54 .Nm diff 55 .Op Fl abdiltw 56 .Op Fl I Ar pattern 57 .Fl D Ar string 58 .Ar file1 file2 59 .Nm diff 60 .Op Fl abdilpTtw 61 .Op Fl I Ar pattern 62 .Op Fl L Ar label 63 .Fl U Ar number 64 .Ar file1 file2 65 .Nm diff 66 .Op Fl abdilNPprsTtw 67 .Oo 68 .Fl c | e | f | 69 .Fl n | q | u 70 .Oc 71 .Op Fl I Ar pattern 72 .Bk -words 73 .Op Fl L Ar label 74 .Op Fl S Ar name 75 .Op Fl X Ar file 76 .Op Fl x Ar pattern 77 .Ek 78 .Ar dir1 dir2 79 .Sh DESCRIPTION 80 The 81 .Nm 82 utility compares the contents of 83 .Ar file1 84 and 85 .Ar file2 86 and writes to the standard output the list of changes necessary to 87 convert one file into the other. 88 No output is produced if the files are identical. 89 .Pp 90 Output options (mutually exclusive): 91 .Bl -tag -width Ds 92 .It Fl C Ar number 93 Like 94 .Fl c 95 but produces a diff with 96 .Ar number 97 lines of context. 98 .It Fl c 99 Produces a diff with 3 lines of context. 100 With 101 .Fl c 102 the output format is modified slightly: 103 the output begins with identification of the files involved and 104 their creation dates and then each change is separated 105 by a line with fifteen 106 .Li * Ns 's . 107 The lines removed from 108 .Ar file1 109 are marked with 110 .Sq \&-\ \& ; 111 those added to 112 .Ar file2 113 are marked 114 .Sq \+\ \& . 115 Lines which are changed from one file to the other are marked in 116 both files with 117 .Sq !\ \& . 118 Changes which lie within 3 lines of each other are grouped together on 119 output. 120 .It Fl D Ar string 121 Creates a merged version of 122 .Ar file1 123 and 124 .Ar file2 125 on the standard output, with C preprocessor controls included so that 126 a compilation of the result without defining 127 .Ar string 128 is equivalent to compiling 129 .Ar file1 , 130 while defining 131 .Ar string 132 will yield 133 .Ar file2 . 134 .It Fl e 135 Produces output in a form suitable as input for the editor utility, 136 .Xr ed 1 , 137 which can then be used to convert file1 into file2. 138 .Pp 139 Extra commands are added to the output when comparing directories with 140 .Fl e , 141 so that the result is a 142 .Xr sh 1 143 script for converting text files which are common to the two directories 144 from their state in 145 .Ar dir1 146 to their state in 147 .Ar dir2 . 148 .It Fl f 149 Identical output to that of the 150 .Fl e 151 flag, but in reverse order. 152 It cannot be digested by 153 .Xr ed 1 . 154 .It Fl n 155 Produces a script similar to that of 156 .Fl e , 157 but in the opposite order and with a count of changed lines on each 158 insert or delete command. 159 This is the form used by 160 .Xr rcsdiff 1 . 161 .It Fl q 162 Just print a line when the files differ. 163 Does not output a list of changes. 164 .It Fl U Ar number 165 Like 166 .Fl u 167 but produces a diff with 168 .Ar number 169 lines of context. 170 .It Fl u 171 Produces a 172 .Em unified 173 diff with 3 lines of context. 174 A unified diff is similar to the context diff produced by the 175 .Fl c 176 option. 177 However, unlike with 178 .Fl c , 179 all lines to be changed (added and/or removed) are present in 180 a single section. 181 .El 182 .Pp 183 Comparison options: 184 .Bl -tag -width Ds 185 .It Fl a 186 Treat all files as 187 .Tn ASCII 188 text. 189 Normally 190 .Nm 191 will simply print 192 .Dq Binary files ... differ 193 if files contain binary characters. 194 Use of this option forces 195 .Nm 196 to produce a diff. 197 .It Fl b 198 Causes trailing blanks (spaces and tabs) to be ignored, and other 199 strings of blanks to compare equal. 200 .It Fl d 201 Try very hard to produce a diff as small as possible. 202 This may consume a lot of processing power and memory when processing 203 large files with many changes. 204 .It Fl I Ar pattern 205 Ignores changes, insertions, and deletions whose lines match the 206 extended regular expression 207 .Ar pattern . 208 Multiple 209 .Fl I 210 patterns may be specified. 211 All lines in the change must match some pattern for the change to be 212 ignored. 213 See 214 .Xr re_format 7 215 for more information on regular expression patterns. 216 .It Fl i 217 Ignores the case of letters. 218 E.g., 219 .Dq A 220 will compare equal to 221 .Dq a . 222 .It Fl L Ar label 223 Print 224 .Ar label 225 instead of the first (and second, if this option is specified twice) 226 file name and time in the context or unified diff header. 227 .It Fl l 228 Long output format; each text file 229 .Nm diff Ns \'d 230 is piped through 231 .Xr pr 1 232 to paginate it; 233 other differences are remembered and summarized 234 after all text file differences are reported. 235 .It Fl p 236 With unified and context diffs, show with each change 237 the first 40 characters of the last line before the context beginning 238 with a letter, an underscore or a dollar sign. 239 For C source code following standard layout conventions, this will 240 show the prototype of the function the change applies to. 241 .It Fl T 242 Print a tab rather than a space before the rest of the line for the 243 normal, context or unified output formats. 244 This makes the alignment of tabs in the line consistent. 245 .It Fl t 246 Will expand tabs in output lines. 247 Normal or 248 .Fl c 249 output adds character(s) to the front of each line which may screw up 250 the indentation of the original source lines and make the output listing 251 difficult to interpret. 252 This option will preserve the original source's indentation. 253 .It Fl w 254 Is similar to 255 .Fl b 256 but causes whitespace (blanks and tabs) to be totally ignored. 257 E.g., 258 .Dq if (\ \&a == b \&) 259 will compare equal to 260 .Dq if(a==b) . 261 .El 262 .Pp 263 Directory comparison options: 264 .Bl -tag -width Ds 265 .It Fl N 266 If a file is found in only one directory, act as if it was found in the 267 other directory too but was of zero size. 268 .It Fl P 269 If a file is found only in 270 .Ar dir2 , 271 act as if it was found in 272 .Ar dir1 273 too but was of zero size. 274 .It Fl r 275 Causes application of 276 .Nm 277 recursively to common subdirectories encountered. 278 .It Fl S Ar name 279 Re-starts a directory 280 .Nm 281 in the middle, beginning with file 282 .Ar name . 283 .It Fl s 284 Causes 285 .Nm 286 to report files which are the same, which are otherwise not mentioned. 287 .It Fl X Ar file 288 Exclude files and subdirectories from comparison whose basenames match 289 lines in 290 .Ar file . 291 Multiple 292 .Fl X 293 options may be specified. 294 .It Fl x Ar pattern 295 Exclude files and subdirectories from comparison whose basenames match 296 .Ar pattern . 297 Patterns are matched using shell-style globbing via 298 .Xr fnmatch 3 . 299 Multiple 300 .Fl x 301 options may be specified. 302 .El 303 .Pp 304 If both arguments are directories, 305 .Nm 306 sorts the contents of the directories by name, and then runs the 307 regular file 308 .Nm 309 algorithm, producing a change list, 310 on text files which are different. 311 Binary files which differ, 312 common subdirectories, and files which appear in only one directory 313 are described as such. 314 In directory mode only regular files and directories are compared. 315 If a non-regular file such as a device special file or 316 .Tn FIFO 317 is encountered, a diagnostic message is printed. 318 .Pp 319 If only one of 320 .Ar file1 321 and 322 .Ar file2 323 is a directory, 324 .Nm 325 is applied to the non-directory file and the file contained in 326 the directory file with a filename that is the same as the 327 last component of the non-directory file. 328 .Pp 329 If either 330 .Ar file1 331 or 332 .Ar file2 333 is 334 .Sq - , 335 the standard input is 336 used in its place. 337 .Ss Output Style 338 The default (without 339 .Fl e , 340 .Fl c , 341 or 342 .Fl n 343 .\" -C 344 options) 345 output contains lines of these forms, where 346 .Va XX , YY , ZZ , QQ 347 are line numbers respective of file order. 348 .Pp 349 .Bl -tag -width "XX,YYcZZ,QQ" -compact 350 .It Li XX Ns Ic a Ns Li YY 351 At (the end of) line 352 .Va XX 353 of 354 .Ar file1 , 355 append the contents 356 of line 357 .Va YY 358 of 359 .Ar file2 360 to make them equal. 361 .It Li XX Ns Ic a Ns Li YY,ZZ 362 Same as above, but append the range of lines, 363 .Va YY 364 through 365 .Va ZZ 366 of 367 .Ar file2 368 to line 369 .Va XX 370 of file1. 371 .It Li XX Ns Ic d Ns Li YY 372 At line 373 .Va XX 374 delete 375 the line. 376 The value 377 .Va YY 378 tells to which line the change would bring 379 .Ar file1 380 in line with 381 .Ar file1 . 382 .It Li XX,YY Ns Ic d Ns Li ZZ 383 Delete the range of lines 384 .Va XX 385 through 386 .Va YY 387 in 388 .Ar file1 . 389 .It Li XX Ns Ic c Ns Li YY 390 Change the line 391 .Va XX 392 in 393 .Ar file1 394 to the line 395 .Va YY 396 in 397 .Ar file2 . 398 .It Li XX,YY Ns Ic c Ns Li ZZ 399 Replace the range of specified lines with the line 400 .Va ZZ . 401 .It Li XX,YY Ns Ic c Ns Li ZZ,QQ 402 Replace the range 403 .Va XX , Ns Va YY 404 from 405 .Ar file1 406 with the range 407 .Va ZZ , Ns Va QQ 408 from 409 .Ar file2 . 410 .El 411 .Pp 412 These lines resemble 413 .Xr ed 1 414 subcommands to convert 415 .Ar file1 416 into 417 .Ar file2 . 418 The line numbers before the action letters pertain to 419 .Ar file1 ; 420 those after pertain to 421 .Ar file2 . 422 Thus, by exchanging 423 .Ic a 424 for 425 .Ic d 426 and reading the line in reverse order, one can also 427 determine how to convert 428 .Ar file2 429 into 430 .Ar file1 . 431 As in 432 .Xr ed 1 , 433 identical 434 pairs (where num1 = num2) are abbreviated as a single 435 number. 436 .Sh ENVIRONMENT 437 .Bl -tag -width TMPDIR 438 .It Ev TMPDIR 439 If the environment variable 440 .Ev TMPDIR 441 exists, 442 .Nm 443 will use the directory specified by 444 .Ev TMPDIR 445 as the temporary directory. 446 .El 447 .Sh FILES 448 .Bl -tag -width /tmp/diff.XXXXXXXX -compact 449 .It Pa /tmp/diff. Ns Ar XXXXXXXX 450 Temporary file used when comparing a device or the standard input. 451 Note that the temporary file is unlinked as soon as it is created 452 so it will not show up in a directory listing. 453 .El 454 .Sh EXIT STATUS 455 The 456 .Nm 457 utility exits with one of the following values: 458 .Pp 459 .Bl -tag -width Ds -offset indent -compact 460 .It 0 461 No differences were found. 462 .It 1 463 Differences were found. 464 .It >1 465 An error occurred. 466 .El 467 .Sh SEE ALSO 468 .Xr cmp 1 , 469 .Xr comm 1 , 470 .Xr diff3 1 , 471 .Xr ed 1 , 472 .Xr patch 1 , 473 .Xr sdiff 1 474 .Rs 475 .%A James W. Hunt 476 .%A M. Douglas McIlroy 477 .%T "An Algorithm for Differential File Comparison" 478 .%J Computing Science Technical Report 479 .%Q Bell Laboratories 41 480 .%D June 1976 481 .Re 482 .Sh STANDARDS 483 The 484 .Nm 485 utility is compliant with the 486 .St -p1003.1-2008 487 specification. 488 .Pp 489 The flags 490 .Op Fl aDdIiLlNnPpqSsTtwXx , 491 as well as the 492 .Ev TMPDIR 493 environment variable, 494 are extensions to that specification. 495 .Sh HISTORY 496 A 497 .Nm 498 command appeared in 499 .At v6 .