474 lines
9.8 KiB
Groff
474 lines
9.8 KiB
Groff
|
.TH DIFF 1 "22sep1993" "GNU Tools" "GNU Tools"
|
||
|
.SH NAME
|
||
|
diff \- find differences between two files
|
||
|
.SH SYNOPSIS
|
||
|
.B diff
|
||
|
[options] from-file to-file
|
||
|
.SH DESCRIPTION
|
||
|
In the simplest case,
|
||
|
.I diff
|
||
|
compares the contents of the two files
|
||
|
.I from-file
|
||
|
and
|
||
|
.IR to-file .
|
||
|
A file name of
|
||
|
.B \-
|
||
|
stands for
|
||
|
text read from the standard input. As a special case,
|
||
|
.B "diff \- \-"
|
||
|
compares a copy of standard input to itself.
|
||
|
|
||
|
If
|
||
|
.I from-file
|
||
|
is a directory and
|
||
|
.I to-file
|
||
|
is not,
|
||
|
.I diff
|
||
|
compares the file in
|
||
|
.I from-file
|
||
|
whose file name is that of
|
||
|
.IR to-file ,
|
||
|
and vice versa. The non-directory file must not be
|
||
|
.BR \- .
|
||
|
|
||
|
If both
|
||
|
.I from-file
|
||
|
and
|
||
|
.I to-file
|
||
|
are directories,
|
||
|
.I diff
|
||
|
compares corresponding files in both directories, in
|
||
|
alphabetical order; this comparison is not recursive unless the
|
||
|
.B \-r
|
||
|
or
|
||
|
.B \-\-recursive
|
||
|
option is given.
|
||
|
.I diff
|
||
|
never
|
||
|
compares the actual contents of a directory as if it were a file. The
|
||
|
file that is fully specified may not be standard input, because standard
|
||
|
input is nameless and the notion of ``file with the same name'' does not
|
||
|
apply.
|
||
|
|
||
|
.B diff
|
||
|
options begin with
|
||
|
.BR \- ,
|
||
|
so normally
|
||
|
.I from-file
|
||
|
and
|
||
|
.I to-file
|
||
|
may not begin with
|
||
|
.BR \- .
|
||
|
However,
|
||
|
.B \-\-
|
||
|
as an
|
||
|
argument by itself treats the remaining arguments as file names even if
|
||
|
they begin with
|
||
|
.BR \- .
|
||
|
.SS Options
|
||
|
Below is a summary of all of the options that GNU
|
||
|
.I diff
|
||
|
accepts.
|
||
|
Most options have two equivalent names, one of which is a single letter
|
||
|
preceded by
|
||
|
.BR \- ,
|
||
|
and the other of which is a long name preceded by
|
||
|
.BR \-\- .
|
||
|
Multiple single letter options (unless they take an
|
||
|
argument) can be combined into a single command line word:
|
||
|
.B \-ac
|
||
|
is
|
||
|
equivalent to
|
||
|
.BR "\-a \-c" .
|
||
|
Long named options can be abbreviated to
|
||
|
any unique prefix of their name. Brackets
|
||
|
.RB ( [
|
||
|
and
|
||
|
.BR ] )
|
||
|
indicate that an
|
||
|
option takes an optional argument.
|
||
|
.TP
|
||
|
.BI \- lines
|
||
|
Show
|
||
|
.I lines
|
||
|
(an integer) lines of context. This option does not
|
||
|
specify an output format by itself; it has no effect unless it is
|
||
|
combined with
|
||
|
.B \-c
|
||
|
or
|
||
|
.BR \-u .
|
||
|
This option is obsolete. For proper
|
||
|
operation,
|
||
|
.I patch
|
||
|
typically needs at least two lines of context.
|
||
|
.TP
|
||
|
.B \-a
|
||
|
Treat all files as text and compare them line-by-line, even if they
|
||
|
do not seem to be text.
|
||
|
.TP
|
||
|
.B \-b
|
||
|
Ignore changes in amount of white space.
|
||
|
.TP
|
||
|
.B \-B
|
||
|
Ignore changes that just insert or delete blank lines.
|
||
|
.TP
|
||
|
.B \-\-brief
|
||
|
Report only whether the files differ, not the details of the
|
||
|
differences.
|
||
|
.TP
|
||
|
.B \-c
|
||
|
Use the context output format.
|
||
|
.TP
|
||
|
.BI "\-C " lines
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.BI \-\-context[= lines ]
|
||
|
Use the context output format, showing
|
||
|
.I lines
|
||
|
(an integer) lines of
|
||
|
context, or three if
|
||
|
.I lines
|
||
|
is not given.
|
||
|
For proper operation,
|
||
|
.I patch
|
||
|
typically needs at least two lines of
|
||
|
context.
|
||
|
.TP
|
||
|
.BI \-\-changed\-group\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output a line group containing differing lines from
|
||
|
both files in if-then-else format.
|
||
|
.TP
|
||
|
.B \-d
|
||
|
Change the algorithm to perhaps find a smaller set of changes. This makes
|
||
|
.I diff
|
||
|
slower (sometimes much slower).
|
||
|
.TP
|
||
|
.BI "\-D " name
|
||
|
Make merged if-then-else format output, conditional on the preprocessor
|
||
|
macro
|
||
|
.IR name .
|
||
|
.TP
|
||
|
.B \-e
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.B \-\-ed
|
||
|
Make output that is a valid
|
||
|
.I ed
|
||
|
script.
|
||
|
.TP
|
||
|
.BI \-\-exclude= pattern
|
||
|
When comparing directories, ignore files and subdirectories whose basenames
|
||
|
match
|
||
|
.IR pattern .
|
||
|
.TP
|
||
|
.BI \-\-exclude\-from= file
|
||
|
When comparing directories, ignore files and subdirectories whose basenames
|
||
|
match any pattern contained in
|
||
|
.IR file .
|
||
|
.TP
|
||
|
.B \-\-expand\-tabs
|
||
|
Expand tabs to spaces in the output, to preserve the alignment of tabs
|
||
|
in the input files.
|
||
|
.TP
|
||
|
.B \-f
|
||
|
Make output that looks vaguely like an
|
||
|
.I ed
|
||
|
script but has changes
|
||
|
in the order they appear in the file.
|
||
|
.TP
|
||
|
.BI "\-F " regexp
|
||
|
In context and unified format, for each hunk of differences, show some
|
||
|
of the last preceding line that matches
|
||
|
.IR regexp .
|
||
|
.TP
|
||
|
.B \-\-forward\-ed
|
||
|
Make output that looks vaguely like an
|
||
|
.B ed
|
||
|
script but has changes
|
||
|
in the order they appear in the file.
|
||
|
.TP
|
||
|
.B \-h
|
||
|
This option currently has no effect; it is present for Unix
|
||
|
compatibility.
|
||
|
.TP
|
||
|
.B \-H
|
||
|
Use heuristics to speed handling of large files that have numerous
|
||
|
scattered small changes.
|
||
|
.TP
|
||
|
.BI \-\-horizon\-lines= lines
|
||
|
Do not discard the last
|
||
|
.I lines
|
||
|
lines of the common prefix
|
||
|
and the first
|
||
|
.I lines
|
||
|
lines of the common suffix.
|
||
|
.TP
|
||
|
.B \-i
|
||
|
Ignore changes in case; consider upper- and lower-case letters
|
||
|
equivalent.
|
||
|
.TP
|
||
|
.BI "\-I " regexp
|
||
|
Ignore changes that just insert or delete lines that match
|
||
|
.IR regexp .
|
||
|
.TP
|
||
|
.BI \-\-ifdef= name
|
||
|
Make merged if-then-else format output, conditional on the preprocessor
|
||
|
macro
|
||
|
.IR name .
|
||
|
.TP
|
||
|
.B \-\-ignore\-all\-space
|
||
|
Ignore white space when comparing lines.
|
||
|
.TP
|
||
|
.B \-\-ignore\-blank\-lines
|
||
|
Ignore changes that just insert or delete blank lines.
|
||
|
.TP
|
||
|
.B \-\-ignore\-case
|
||
|
Ignore changes in case; consider upper- and lower-case to be the same.
|
||
|
.TP
|
||
|
.BI \-\-ignore\-matching\-lines= regexp
|
||
|
Ignore changes that just insert or delete lines that match
|
||
|
.IR regexp .
|
||
|
.TP
|
||
|
.B \-\-ignore\-space\-change
|
||
|
Ignore changes in amount of white space.
|
||
|
.TP
|
||
|
.B \-\-initial\-tab
|
||
|
Output a tab rather than a space before the text of a line in normal or
|
||
|
context format. This causes the alignment of tabs in the line to look
|
||
|
normal.
|
||
|
.TP
|
||
|
.B \-l
|
||
|
Pass the output through
|
||
|
.I pr
|
||
|
to paginate it.
|
||
|
.TP
|
||
|
.BI "\-L " label
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.BI \-\-label= label
|
||
|
Use
|
||
|
.I label
|
||
|
instead of the file name in the context format
|
||
|
and unified format
|
||
|
headers.
|
||
|
.TP
|
||
|
.B \-\-left\-column
|
||
|
Print only the left column of two common lines in side by side format.
|
||
|
.TP
|
||
|
.BI \-\-line\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output all input lines in in-then-else format.
|
||
|
.TP
|
||
|
.B \-\-minimal
|
||
|
Change the algorithm to perhaps find a smaller set of changes. This
|
||
|
makes
|
||
|
.I diff
|
||
|
slower (sometimes much slower).
|
||
|
.TP
|
||
|
.B \-n
|
||
|
Output RCS-format diffs; like
|
||
|
.B \-f
|
||
|
except that each command
|
||
|
specifies the number of lines affected.
|
||
|
.TP
|
||
|
.B \-N
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.B \-\-new\-file
|
||
|
In directory comparison, if a file is found in only one directory,
|
||
|
treat it as present but empty in the other directory.
|
||
|
.TP
|
||
|
.BI \-\-new\-group\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output a group of lines taken from just the second
|
||
|
file in if-then-else format.
|
||
|
.TP
|
||
|
.BI \-\-new\-line\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output a line taken from just the second file in
|
||
|
if-then-else format.
|
||
|
.TP
|
||
|
.BI \-\-old\-group\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output a group of lines taken from just the first
|
||
|
file in if-then-else format.
|
||
|
.TP
|
||
|
.BI \-\-old\-line\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output a line taken from just the first file in
|
||
|
if-then-else format.
|
||
|
.TP
|
||
|
.B \-p
|
||
|
Show which C function each change is in.
|
||
|
.TP
|
||
|
.B \-P
|
||
|
When comparing directories, if a file appears only in the second
|
||
|
directory of the two, treat it as present but empty in the other.
|
||
|
.TP
|
||
|
.B \-\-paginate
|
||
|
Pass the output through
|
||
|
.I pr
|
||
|
to paginate it.
|
||
|
.TP
|
||
|
.B \-q
|
||
|
Report only whether the files differ, not the details of the
|
||
|
differences.
|
||
|
.TP
|
||
|
.B \-r
|
||
|
When comparing directories, recursively compare any subdirectories
|
||
|
found.
|
||
|
.TP
|
||
|
.B \-\-rcs
|
||
|
Output RCS-format diffs; like
|
||
|
.B \-f
|
||
|
except that each command
|
||
|
specifies the number of lines affected.
|
||
|
.TP
|
||
|
.B \-\-recursive
|
||
|
When comparing directories, recursively compare any subdirectories
|
||
|
found.
|
||
|
.TP
|
||
|
.B \-\-report\-identical\-files
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.B \-s
|
||
|
Report when two files are the same.
|
||
|
.TP
|
||
|
.BI "\-S " file
|
||
|
When comparing directories, start with the file
|
||
|
.IR file .
|
||
|
This is
|
||
|
used for resuming an aborted comparison.
|
||
|
.TP
|
||
|
.B \-\-sdiff\-merge\-assist
|
||
|
Print extra information to help
|
||
|
.IR sdiff .
|
||
|
.I sdiff
|
||
|
uses this
|
||
|
option when it runs
|
||
|
.IR diff .
|
||
|
This option is not intended for users
|
||
|
to use directly.
|
||
|
.TP
|
||
|
.B \-\-show\-c\-function
|
||
|
Show which C function each change is in.
|
||
|
.TP
|
||
|
.BI \-\-show\-function\-line= regexp
|
||
|
In context and unified format, for each hunk of differences, show some
|
||
|
of the last preceding line that matches
|
||
|
.IR regexp .
|
||
|
.TP
|
||
|
.B \-\-side\-by\-side
|
||
|
Use the side by side output format.
|
||
|
.TP
|
||
|
.B \-\-speed\-large\-files
|
||
|
Use heuristics to speed handling of large files that have numerous
|
||
|
scattered small changes.
|
||
|
.TP
|
||
|
.BI \-\-starting\-file= file
|
||
|
When comparing directories, start with the file
|
||
|
.IR file .
|
||
|
This is
|
||
|
used for resuming an aborted comparison.
|
||
|
.TP
|
||
|
.B \-\-suppress\-common\-lines
|
||
|
Do not print common lines in side by side format.
|
||
|
.TP
|
||
|
.B \-t
|
||
|
Expand tabs to spaces in the output, to preserve the alignment of tabs
|
||
|
in the input files.
|
||
|
.TP
|
||
|
.B \-T
|
||
|
Output a tab rather than a space before the text of a line in normal or
|
||
|
context format. This causes the alignment of tabs in the line to look
|
||
|
normal.
|
||
|
.TP
|
||
|
.B \-\-text
|
||
|
Treat all files as text and compare them line-by-line, even if they
|
||
|
do not appear to be text.
|
||
|
.TP
|
||
|
.B \-u
|
||
|
Use the unified output format.
|
||
|
.TP
|
||
|
.BI \-\-unchanged\-group\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output a group of common lines taken from both files
|
||
|
in if-then-else format.
|
||
|
.TP
|
||
|
.BI \-\-unchanged\-line\-format= format
|
||
|
Use
|
||
|
.I format
|
||
|
to output a line common to both files in if-then-else
|
||
|
format.
|
||
|
.TP
|
||
|
.B \-\-unidirectional\-new\-file
|
||
|
When comparing directories, if a file appears only in the second
|
||
|
directory of the two, treat it as present but empty in the other.
|
||
|
.TP
|
||
|
.BI "\-U " lines
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.BI \-\-unified[= lines ]
|
||
|
Use the unified output format, showing
|
||
|
.I lines
|
||
|
(an integer) lines of
|
||
|
context, or three if
|
||
|
.I lines
|
||
|
is not given.
|
||
|
For proper operation,
|
||
|
.I patch
|
||
|
typically needs at least two lines of
|
||
|
context.
|
||
|
.TP
|
||
|
.B \-v
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.B \-\-version
|
||
|
Output the version number of
|
||
|
.IR diff .
|
||
|
.TP
|
||
|
.B \-w
|
||
|
Ignore white space when comparing lines.
|
||
|
.TP
|
||
|
.BI "\-W " columns
|
||
|
.br
|
||
|
.ns
|
||
|
.TP
|
||
|
.BI \-\-width= columns
|
||
|
Use an output width of
|
||
|
.I columns
|
||
|
in side by side format.
|
||
|
.TP
|
||
|
.BI "\-x " pattern
|
||
|
When comparing directories, ignore files and subdirectories whose basenames
|
||
|
match
|
||
|
.IR pattern .
|
||
|
.TP
|
||
|
.BI "\-X " file
|
||
|
When comparing directories, ignore files and subdirectories whose basenames
|
||
|
match any pattern contained in
|
||
|
.IR file .
|
||
|
.TP
|
||
|
.B \-y
|
||
|
Use the side by side output format.
|
||
|
.SH SEE ALSO
|
||
|
cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1).
|
||
|
.SH DIAGNOSTICS
|
||
|
An exit status of 0 means no differences were found, 1 means some
|
||
|
differences were found, and 2 means trouble.
|