DIFF(1) User Commands DIFF(1)

# [NAME](#NAME)

diff - compare files line by line

# [SYNOPSIS](#SYNOPSIS)

**diff** \[*OPTION*]... *FILES*

# [DESCRIPTION](#DESCRIPTION)

Compare FILES line by line.

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

[**--normal**](#normal)

output a normal diff (the default)

[**-q**, **--brief**](#q)

report only when files differ

[**-s**, **--report-identical-files**](#s)

report when two files are the same

[**-c**, **-C** NUM, **--context**\[=*NUM*\]](#c)

output NUM (default 3) lines of copied context

[**-u**, **-U** NUM, **--unified**\[=*NUM*\]](#u)

output NUM (default 3) lines of unified context

[**-e**, **--ed**](#e)

output an ed script

[**-n**, **--rcs**](#n)

output an RCS format diff

[**-y**, **--side-by-side**](#y)

output in two columns

[**-W**, **--width**=*NUM*](#W)

output at most NUM (default 130) print columns

[**--left-column**](#left)

output only the left column of common lines

[**--suppress-common-lines**](#suppress)

do not output common lines

[**-p**, **--show-c-function**](#p)

show which C function each change is in

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

show the most recent line matching RE

[**--label** LABEL](#label)

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

[**-t**, **--expand-tabs**](#t)

expand tabs to spaces in output

[**-T**, **--initial-tab**](#T)

make tabs line up by prepending a tab

[**--tabsize**=*NUM*](#tabsize)

tab stops every NUM (default 8) print columns

[**--suppress-blank-empty**](#suppress~2)

suppress space or tab before empty output lines

[**-l**, **--paginate**](#l)

pass output through 'pr' to paginate it

[**-r**, **--recursive**](#r)

recursively compare any subdirectories found

[**--no-dereference**](#no)

don't follow symbolic links

**-N**, **--new-file**

treat absent files as empty

[**--unidirectional-new-file**](#unidirectional)

treat absent first files as empty

[**--ignore-file-name-case**](#ignore)

ignore case when comparing file names

[**--no-ignore-file-name-case**](#no~2)

consider case when comparing file names

[**-x**, **--exclude**=*PAT*](#x)

exclude files that match PAT

[**-X**, **--exclude-from**=*FILE*](#X)

exclude files that match any pattern in FILE

[**-S**, **--starting-file**=*FILE*](#S)

start with FILE when comparing directories

[**--from-file**=*FILE1*](#from)

compare FILE1 to all operands; FILE1 can be a directory

[**--to-file**=*FILE2*](#to)

compare all operands to FILE2; FILE2 can be a directory

[**-i**, **--ignore-case**](#i)

ignore case differences in file contents

**-E**, **--ignore-tab-expansion**

ignore changes due to tab expansion

[**-Z**, **--ignore-trailing-space**](#Z)

ignore white space at line end

[**-b**, **--ignore-space-change**](#b)

ignore changes in the amount of white space

[**-w**, **--ignore-all-space**](#w)

ignore all white space

[**-B**, **--ignore-blank-lines**](#B)

ignore changes where lines are all blank

[**-I**, **--ignore-matching-lines**=*RE*](#I)

ignore changes where all lines match RE

[**-a**, **--text**](#a)

treat all files as text

[**--strip-trailing-cr**](#strip)

strip trailing carriage return on input

[**-D**, **--ifdef**=*NAME*](#D)

output merged file with '#ifdef NAME' diffs

[**--GTYPE-group-format**=*GFMT*](#GTYPE)

format GTYPE input groups with GFMT

[**--line-format**=*LFMT*](#line)

format all input lines with LFMT

[**--LTYPE-line-format**=*LFMT*](#LTYPE)

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'.](#LTYPE~2)

GTYPE is LTYPE or 'changed'.

GFMT (only) may contain:

%&lt;

lines from FILE1

%&gt;

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](#F)

first line number

[L](#L)

last line number

[N](#N)

number of lines = L-F+1

[E](#E)

F-1

[M](#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](#C)

the character C (other characters represent themselves)

[**-d**, **--minimal**](#d)

try hard to find a smaller set of changes

[**--horizon-lines**=*NUM*](#horizon)

keep NUM lines of the common prefix and suffix

[**--speed-large-files**](#speed)

assume large files and many scattered small changes

[**--color**\[=*WHEN*\]](#color)

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

[**--palette**=*PALETTE*](#palette)

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

[**--help**](#help)

display this help and exit

[**-v**, **--version**](#v)

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.

# [AUTHOR](#AUTHOR)

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

# [REPORTING BUGS](#REPORTING_BUGS)

Report bugs to: bug-diffutils@gnu.org  
GNU diffutils home page: &lt;https://www.gnu.org/software/diffutils/&gt;  
General help using GNU software: &lt;https://www.gnu.org/gethelp/&gt;

# [COPYRIGHT](#COPYRIGHT)

Copyright © 2025 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later &lt;https://gnu.org/licenses/gpl.html&gt;.  
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

# [SEE ALSO](#SEE_ALSO)

[**wdiff**(1)](/man/os/diffutils/wdiff.1), [**cmp**(1)](/man/os/diffutils/cmp.1), [**diff3**(1)](/man/os/diffutils/diff3.1), [**sdiff**(1)](/man/os/diffutils/sdiff.1), [**patch**(1)](/man/os/diffutils/patch.1)

The full documentation for **diff** is maintained as a Texinfo manual. If the **info** and **diff** programs are properly installed at your site, the command

**info diff**

should give you access to the complete manual.

August 2026 diffutils 3.12

---

Document: diff(1) from diffutils 3.12-r7 (Chainguard OS)
Source: https://git.savannah.gnu.org/git/diffutils.git
