1 .\" $OpenBSD: diff.1,v 1.47 2015/11/24 19:35:41 jmc Exp $
3 .\" Copyright (c) 1980, 1990, 1993
4 .\" The Regents of the University of California. All rights reserved.
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
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.
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
30 .\" @(#)diff.1 8.1 (Berkeley) 6/30/93
38 .Nd differential file and directory comparator
47 .Op Fl -changed-group-format Ar GFMT
51 .Op Fl -ignore-all-space
53 .Op Fl -ignore-space-change
56 .Op Fl -no-ignore-file-name-case
59 .Op Fl -show-c-function
61 .Op Fl -speed-large-files
62 .Op Fl -strip-trailing-cr
66 .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
67 .Op Fl L Ar label | Fl -label Ar label
71 .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
72 .Op Fl L Ar label | Fl -label Ar label
74 .Op Fl -changed-group-format Ar GFMT
78 .Op Fl -ignore-all-space
80 .Op Fl -ignore-space-change
83 .Op Fl -no-ignore-file-name-case
87 .Op Fl -show-c-function
88 .Op Fl -speed-large-files
90 .Op Fl -strip-trailing-cr
93 .Fl C Ar number | -context Ar number
97 .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
99 .Op Fl -changed-group-format Ar GFMT
103 .Op Fl -ignore-all-space
105 .Op Fl -ignore-space-change
108 .Op Fl -no-ignore-file-name-case
112 .Op Fl -show-c-function
113 .Op Fl -speed-large-files
114 .Op Fl -starting-file
115 .Op Fl -strip-trailing-cr
118 .Fl D Ar string | Fl -ifdef Ar string
122 .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
123 .Op Fl L Ar label | Fl -label Ar label
125 .Op Fl -changed-group-format Ar GFMT
129 .Op Fl -ignore-all-space
131 .Op Fl -ignore-space-change
134 .Op Fl -no-ignore-file-name-case
138 .Op Fl -show-c-function
139 .Op Fl -speed-large-files
140 .Op Fl -starting-file
141 .Op Fl -strip-trailing-cr
144 .Fl U Ar number | Fl -unified Ar number
147 .Op Fl aBbdilNPprsTtw
153 .Op Fl -changed-group-format Ar GFMT
158 .Op Fl -ignore-all-space
160 .Op Fl -ignore-space-change
164 .Op Fl -no-ignore-file-name-case
169 .Op Fl -report-identical-files
170 .Op Fl -show-c-function
171 .Op Fl -speed-large-files
172 .Op Fl -strip-trailing-cr
175 .Op Fl -unidirectional-new-file
177 .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
179 .Op Fl L Ar label | Fl -label Ar label
180 .Op Fl S Ar name | Fl -starting-file Ar name
181 .Op Fl X Ar file | Fl -exclude-from Ar file
182 .Op Fl x Ar pattern | Fl -exclude Ar pattern
188 utility compares the contents of
192 and writes to the standard output the list of changes necessary to
193 convert one file into the other.
194 No output is produced if the files are identical.
196 Output options (mutually exclusive):
198 .It Fl C Ar number Fl -context Ar number
201 but produces a diff with
205 Produces a diff with 3 lines of context.
208 the output format is modified slightly:
209 the output begins with identification of the files involved and
210 their creation dates and then each change is separated
211 by a line with fifteen
213 The lines removed from
221 Lines which are changed from one file to the other are marked in
224 Changes which lie within 3 lines of each other are grouped together on
226 .It Fl D Ar string Fl -ifdef Ar string
227 Creates a merged version of
231 on the standard output, with C preprocessor controls included so that
232 a compilation of the result without defining
234 is equivalent to compiling
241 Produces output in a form suitable as input for the editor utility,
243 which can then be used to convert file1 into file2.
245 Extra commands are added to the output when comparing directories with
247 so that the result is a
249 script for converting text files which are common to the two directories
255 Identical output to that of the
257 flag, but in reverse order.
258 It cannot be digested by
261 Produces a script similar to that of
263 but in the opposite order and with a count of changed lines on each
264 insert or delete command.
265 This is the form used by
268 Just print a line when the files differ.
269 Does not output a list of changes.
270 .It Fl U Ar number Fl -unified Ar number
273 but produces a diff with
279 diff with 3 lines of context.
280 A unified diff is similar to the context diff produced by the
285 all lines to be changed (added and/or removed) are present in
298 .Dq Binary files ... differ
299 if files contain binary characters.
300 Use of this option forces
303 .It Fl B Fl -ignore-blank-lines
304 Causes chunks that include only blank lines to be ignored.
306 Causes trailing blanks (spaces and tabs) to be ignored, and other
307 strings of blanks to compare equal.
309 Try very hard to produce a diff as small as possible.
310 This may consume a lot of processing power and memory when processing
311 large files with many changes.
312 .It Fl I Ar pattern Fl -ignore-matching-lines Ar pattern
313 Ignores changes, insertions, and deletions whose lines match the
314 extended regular expression
318 patterns may be specified.
319 All lines in the change must match some pattern for the change to be
323 for more information on regular expression patterns.
324 .It Fl i -ignore-case
325 Ignores the case of letters.
328 will compare equal to
331 Pass the output through
334 .It Fl L Ar label Fl -label Ar label
337 instead of the first (and second, if this option is specified twice)
338 file name and time in the context or unified diff header.
339 .It Fl p -show-c-function
340 With unified and context diffs, show with each change
341 the first 40 characters of the last line before the context beginning
342 with a letter, an underscore or a dollar sign.
343 For C source code following standard layout conventions, this will
344 show the prototype of the function the change applies to.
345 .It Fl T -initial-tab
346 Print a tab rather than a space before the rest of the line for the
347 normal, context or unified output formats.
348 This makes the alignment of tabs in the line consistent.
349 .It Fl t -expand-tabs
350 Will expand tabs in output lines.
353 output adds character(s) to the front of each line which may screw up
354 the indentation of the original source lines and make the output listing
355 difficult to interpret.
356 This option will preserve the original source's indentation.
357 .It Fl w -ignore-all-blanks
359 .Fl b -ignore-space-change
360 but causes whitespace (blanks and tabs) to be totally ignored.
362 .Dq if (\ \&a == b \&)
363 will compare equal to
365 .It Fl -changed-group-format Ar GFMT
366 Format input groups in the provided
368 the format is a string with special keywords:
375 .It Fl -ignore-file-name-case
376 ignore case when comparing file names
377 .It Fl -no-ignore-file-name-case
378 do not ignore case wen comparing file names (default)
381 .It Fl -speed-large-files
382 stub option for compatibility with GNU diff
383 .It Fl -strip-trailing-cr
384 strip carriage return on input files
385 .It Fl tabsize Ar number
386 Number of spaces representing a tab (default 8)
389 Directory comparison options:
392 If a file is found in only one directory, act as if it was found in the
393 other directory too but was of zero size.
394 .It Fl P -unidirectional-new-file
395 If a file is found only in
397 act as if it was found in
399 too but was of zero size.
401 Causes application of
403 recursively to common subdirectories encountered.
404 .It Fl S Ar name Fl -starting-file Ar name
405 Re-starts a directory
407 in the middle, beginning with file
409 .It Fl s -report-identical-files
412 to report files which are the same, which are otherwise not mentioned.
413 .It Fl X Ar file Fl -exclude-from Ar file
414 Exclude files and subdirectories from comparison whose basenames match
419 options may be specified.
420 .It Fl x Ar pattern Fl -exclude Ar pattern
421 Exclude files and subdirectories from comparison whose basenames match
423 Patterns are matched using shell-style globbing via
427 options may be specified.
430 If both arguments are directories,
432 sorts the contents of the directories by name, and then runs the
435 algorithm, producing a change list,
436 on text files which are different.
437 Binary files which differ,
438 common subdirectories, and files which appear in only one directory
439 are described as such.
440 In directory mode only regular files and directories are compared.
441 If a non-regular file such as a device special file or
443 is encountered, a diagnostic message is printed.
451 is applied to the non-directory file and the file contained in
452 the directory file with a filename that is the same as the
453 last component of the non-directory file.
461 the standard input is
471 output contains lines of these forms, where
472 .Va XX , YY , ZZ , QQ
473 are line numbers respective of file order.
475 .Bl -tag -width "XX,YYcZZ,QQ" -compact
476 .It Li XX Ns Ic a Ns Li YY
487 .It Li XX Ns Ic a Ns Li YY,ZZ
488 Same as above, but append the range of lines,
497 .It Li XX Ns Ic d Ns Li YY
504 tells to which line the change would bring
508 .It Li XX,YY Ns Ic d Ns Li ZZ
509 Delete the range of lines
515 .It Li XX Ns Ic c Ns Li YY
524 .It Li XX,YY Ns Ic c Ns Li ZZ
525 Replace the range of specified lines with the line
527 .It Li XX,YY Ns Ic c Ns Li ZZ,QQ
540 subcommands to convert
544 The line numbers before the action letters pertain to
546 those after pertain to
552 and reading the line in reverse order, one can also
553 determine how to convert
560 pairs (where num1 = num2) are abbreviated as a single
563 .Bl -tag -width /tmp/diff.XXXXXXXX -compact
564 .It Pa /tmp/diff. Ns Ar XXXXXXXX
565 Temporary file used when comparing a device or the standard input.
566 Note that the temporary file is unlinked as soon as it is created
567 so it will not show up in a directory listing.
572 utility exits with one of the following values:
574 .Bl -tag -width Ds -offset indent -compact
576 No differences were found.
578 Differences were found.
592 .%A M. Douglas McIlroy
593 .%T "An Algorithm for Differential File Comparison"
594 .%J Computing Science Technical Report
595 .%Q Bell Laboratories 41
601 utility is compliant with the
606 .Op Fl aDdIiLlNnPpqSsTtwXx
607 are extensions to that specification.