---
name: "diff"
section: "1"
platform: "linux"
package: "diffutils"
version: "3.12-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/diff"
---

# diff(1)

compare files line by line

## NAME

diff - compare files line by line

## SYNOPSIS

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

## DESCRIPTION

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.

## AUTHOR

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

## REPORTING BUGS

Report bugs to: bug-diffutils@gnu.org\
 GNU diffutils home page: \<https://www.gnu.org/software/diffutils/\>\
 General help using GNU software: \<https://www.gnu.org/gethelp/\>

## COPYRIGHT

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

## SEE ALSO

[**wdiff**(1)](/wdiff/1.md), [**cmp**(1)](/cmp/1.md), [**diff3**(1)](/diff3/1.md), [**sdiff**(1)](/sdiff/1.md), [**patch**(1)](/patch/1.md)

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.
