485 lines
10 KiB
Groff
485 lines
10 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
|
|
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 \-\-rcs
|
|
Output RCS-format diffs; like
|
|
.B \-f
|
|
except that each command
|
|
specifies the number of lines affected.
|
|
.TP
|
|
.B \-r
|
|
.br
|
|
.ns
|
|
.TP
|
|
.B \-\-recursive
|
|
When comparing directories, recursively compare any subdirectories
|
|
found.
|
|
.TP
|
|
.B \-s
|
|
.br
|
|
.ns
|
|
.TP
|
|
.B \-\-report\-identical\-files
|
|
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 horizontal 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 EXAMPLES
|
|
To save to a file some changes that you have made to your local source
|
|
tree (possibly including new files), which you would like to show to others
|
|
(perhaps using the
|
|
.B send-pr(1)
|
|
program), you could type
|
|
.sp
|
|
diff -crN foo.orig foo >foo.diff
|
|
.sp
|
|
where
|
|
.I foo.orig
|
|
and
|
|
.I foo
|
|
might be directory hierarchies or single files.
|
|
.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.
|