DIFF(1)                                                   DIFF(1)

     NAME
          diff - differential file comparator

     SYNOPSIS
          diff [ -abcefmnruw ] file1 ... file2

     DESCRIPTION
          Diff tells what lines must be changed in two files to bring
          them into agreement.  If one file is a directory, then a
          file in that directory with basename the same as that of the
          other file is used.  If both files are directories, simi-
          larly named files in the two directories are compared by the
          method of diff for text files and cmp(1) otherwise.  If more
          than two file names are given, then each argument is com-
          pared to the last argument as above.  The -r option causes
          diff to process similarly named subdirectories recursively.
          When processing more than one file, diff prefixes file dif-
          ferences with a single line listing the two differing files,
          in the form of a diff command line.  The -m flag causes this
          behavior even when processing single files.

          The normal output contains lines of these forms:

               n1 a n3,n4
               n1,n2 d n3
               n1,n2 c n3,n4

          These lines resemble ed commands to convert file1 into
          file2. The numbers after the letters pertain to file2. In
          fact, by exchanging `a' for `d' and reading backward one may
          ascertain equally how to convert file2 into file1. As in ed,
          identical pairs where n1 = n2 or n3 = n4 are abbreviated as
          a single number.

          Following each of these lines come all the lines that are
          affected in the first file flagged by `<', then all the
          lines that are affected in the second file flagged by `>'.

          The -b option causes trailing blanks (spaces and tabs) to be
          ignored and other strings of blanks to compare equal.  The
          -w option causes all white-space to be removed from input
          lines before applying the difference algorithm.

          The -n option prefixes each range with file: and inserts a
          space around the a, c, and d verbs.  The -e option produces
          a script of a, c and d commands for the editor ed, which
          will recreate file2 from file1. The -f option produces a
          similar script, not useful with ed, in the opposite order.
          It may, however, be useful as input to a stream-oriented
          post-processor.

     Page 1                       Plan 9            (printed 11/22/24)

     DIFF(1)                                                   DIFF(1)

          The -c option includes three lines of context around each
          change, merging changes whose contexts overlap.  In this
          mode, diff prints `-' and `+' instead of `<' and `>' because
          the former are easier to distinguish when mixed.  The -a
          flag displays the entire file as context.

          The -u option provides a unix-compatible unified diff.  This
          format is similar to that provided by -c.  However, the `+'
          and `-' prefixes are not separated from the rest of the line
          by spaces, and the file header is in the following format:

               --- filename.old
               +++ filename.new
               @@ -line,len +line,len @@

          Except in rare circumstances, diff finds a smallest suffi-
          cient set of file differences.

     FILES
          /tmp/diff[12]

     SOURCE
          /sys/src/cmd/diff

     SEE ALSO
          cmp(1), comm(1), ed(1), idiff(1)

     DIAGNOSTICS
          Exit status is the empty string for no differences, `some'
          for some, and `error' for trouble.

     BUGS
          Editing scripts produced under the -e or -f option are naive
          about creating lines consisting of a single `.'.

          When running diff on directories, the notion of what is a
          text file is open to debate.

     Page 2                       Plan 9            (printed 11/22/24)