diff(1)

diff1

Compare files line by line

Usage

diff [OPTION] ... FILES

Overview

Compare FILES line by line.

Mandatory arguments to long options are mandatory for short options too.

--normal

output a normal diff (the default)

-q, --brief

report only when files differ

-s, --report-identical-files

report when two files are the same

-c, -C NUM, --context[=NUM]

output NUM (default 3) lines of copied context

-u, -U NUM, --unified[=NUM]

output NUM (default 3) lines of unified context

-e, --ed

output an ed script

-n, --rcs

output an RCS format diff

-y, --side-by-side

output in two columns

-W, --width=NUM

output at most NUM (default 130) print columns

--left-column

output only the left column of common lines

--suppress-common-lines

do not output common lines

-p, --show-c-function

show which C function each change is in

-F, --show-function-line=RE

show the most recent line matching RE

--label LABEL

use LABEL instead of file name and timestamp (can be repeated)

-t, --expand-tabs

expand tabs to spaces in output

-T, --initial-tab

make tabs line up by prepending a tab

--tabsize=NUM

tab stops every NUM (default 8) print columns

--suppress-blank-empty

suppress space or tab before empty output lines

-l, --paginate

pass output through 'pr' to paginate it

-r, --recursive

recursively compare any subdirectories found

--no-dereference

don't follow symbolic links

-N, --new-file

treat absent files as empty

--unidirectional-new-file

treat absent first files as empty

--ignore-file-name-case

ignore case when comparing file names

--no-ignore-file-name-case

consider case when comparing file names

-x, --exclude=PAT

exclude files that match PAT

-X, --exclude-from=FILE

exclude files that match any pattern in FILE

-S, --starting-file=FILE

start with FILE when comparing directories

--from-file=FILE1

compare FILE1 to all operands; FILE1 can be a directory

--to-file=FILE2

compare all operands to FILE2; FILE2 can be a directory

-i, --ignore-case

ignore case differences in file contents

-E, --ignore-tab-expansion

ignore changes due to tab expansion

-Z, --ignore-trailing-space

ignore white space at line end

-b, --ignore-space-change

ignore changes in the amount of white space

-w, --ignore-all-space

ignore all white space

-B, --ignore-blank-lines

ignore changes where lines are all blank

-I, --ignore-matching-lines=RE

ignore changes where all lines match RE

-a, --text

treat all files as text

--strip-trailing-cr

strip trailing carriage return on input

-D, --ifdef=NAME

output merged file with '#ifdef NAME' diffs

--GTYPE-group-format=GFMT

format GTYPE input groups with GFMT

--line-format=LFMT

format all input lines with LFMT

--LTYPE-line-format=LFMT

format LTYPE input lines with LFMT

These format options provide fine-grained control over the output

of diff, generalizing -D/--ifdef.

LTYPE is 'old', 'new', or 'unchanged'.

GTYPE is LTYPE or 'changed'.

GFMT (only) may contain:

%<

lines from FILE1

%>

lines from FILE2

%=

lines common to FILE1 and FILE2

%[-][WIDTH][.[PREC]]{doxX}LETTER

printf-style spec for LETTER

LETTERs are as follows for new group, lower case for old group:

F

first line number

L

last line number

N

number of lines = L-F+1

E

F-1

M

L+1

%(A=B?T:E)

if A equals B then T else E

LFMT (only) may contain:

%L

contents of line

%l

contents of line, excluding any trailing newline

%[-][WIDTH][.[PREC]]{doxX}n

printf-style spec for input line number

Both GFMT and LFMT may contain:

%%

%

%c'C'

the single character C

%c'\OOO'

the character with octal code OOO

C

the character C (other characters represent themselves)

-d, --minimal

try hard to find a smaller set of changes

--horizon-lines=NUM

keep NUM lines of the common prefix and suffix

--speed-large-files

assume large files and many scattered small changes

--color[=WHEN]

color output; WHEN is 'never', 'always', or 'auto'; plain --color means --color='auto'

--palette=PALETTE

the colors to use when --color is active; PALETTE is a colon-separated list of terminfo capabilities

--help

display this help and exit

-v, --version

output version information and exit

FILES are 'FILE1 FILE2' or 'DIR1 DIR2' or 'DIR FILE' or 'FILE DIR'. If --from-file or --to-file is given, there are no restrictions on FILE(s). If a FILE is '-', read standard input. Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.

Releases

19 releases since Debian 1.1 (Buzz); the text changed 10 times.

  1. 1.1–2.2
  2. 3.0
  3. 3.1–5.0
  4. 6.0
  5. 7
  6. 8
  7. 9
  8. 10–11
  9. 12
  10. 13
  11. Arch

--GTYPE-group-format since Debian 3.1 (Sarge); --LTYPE-line-format since Debian 3.1 (Sarge); --color since Debian 9 (Stretch); --context since Debian 7 (Wheezy); --exclude since Debian 7 (Wheezy); --exclude-from since Debian 7 (Wheezy); --from-file since Debian 3.1 (Sarge); --help since Debian 3.1 (Sarge); --ifdef since Debian 7 (Wheezy); --ignore-file-name-case since Debian 3.1 (Sarge); --ignore-matching-lines since Debian 7 (Wheezy); --ignore-tab-expansion since Debian 3.1 (Sarge); --ignore-trailing-space since Debian 8 (Jessie); --no-dereference since Debian 9 (Stretch); --no-ignore-file-name-case since Debian 3.1 (Sarge); --normal since Debian 3.1 (Sarge); --palette since Debian 9 (Stretch); --show-function-line since Debian 7 (Wheezy); --starting-file since Debian 7 (Wheezy); --strip-trailing-cr since Debian 3.1 (Sarge); --suppress-blank-empty since Debian 6.0 (Squeeze); --tabsize since Debian 6.0 (Squeeze); --to-file since Debian 3.1 (Sarge); --unified since Debian 7 (Wheezy); --width since Debian 7 (Wheezy); -C since Debian 7 (Wheezy); -D since Debian 7 (Wheezy); -E since Debian 3.1 (Sarge); -F since Debian 7 (Wheezy); -I since Debian 7 (Wheezy); -S since Debian 7 (Wheezy); -U since Debian 7 (Wheezy); -W since Debian 7 (Wheezy); -X since Debian 7 (Wheezy); -Z since Debian 8 (Jessie); -c since Debian 7 (Wheezy); -u since Debian 7 (Wheezy); -x since Debian 7 (Wheezy).

--changed-group-format until Debian 3.0 (Woody); --forward-ed until Debian 3.0 (Woody); --new-group-format until Debian 3.0 (Woody); --new-line-format until Debian 3.0 (Woody); --old-group-format until Debian 3.0 (Woody); --old-line-format until Debian 3.0 (Woody); --sdiff-merge-assist until Debian 3.0 (Woody); --unchanged-group-format until Debian 3.0 (Woody); --unchanged-line-format until Debian 3.0 (Woody); -H until Debian 3.0 (Woody); -L until Debian 3.0 (Woody); -P until Debian 3.0 (Woody); -f until Debian 3.0 (Woody); -h until Debian 3.0 (Woody); -lines until Debian 3.0 (Woody).

Author

Written by Paul Eggert, Mike Haertel, David Hayes, Richard Stallman, and Len Tower.

Reporting bugs

Report bugs to: [email protected]
GNU diffutils home page: <https://www.gnu.org/software/diffutils/>
General help using GNU software: <https://www.gnu.org/gethelp/>

From diffutils 3.12-2 in Arch Linux 2026-11-01. Parsed by carta from the page's man source.