Unix‎ > ‎Solaris‎ > ‎Solaris man pages‎ > ‎1‎ > ‎


     patch - apply changes to files

     patch [-blNR] [-c | -e | -n | -u]  [-d dir]  [-D define]  [-
     i patchfile] [-o outfile] [-p num] [-r rejectfile] [file]

     The patch command reads a source (patch) file containing any
     of the three forms of difference (diff) listings produced by
     the diff(1) command (normal, context  or  in  the  style  of
     ed(1))  and  apply those differences to a file.  By default,
     patch reads from the standard input.

     patch attempts to determine the type of  the  diff  listing,
     unless overruled by a -c, -e, or -n option.

     If the patch file contains more than one patch,  patch  will
     attempt  to apply each of them as if they came from separate
     patch files. (In this case the name of the patch  file  must
     be determinable for each diff listing.)

     The following options are supported:

     -b              Saves a copy of  the  original  contents  of
                     each  modified  file, before the differences
                     are applied, in a file of the same name with
                     the suffix .orig appended to it. If the file
                     already exists, it will be  overwritten.  If
                     multiple  patches  are  applied  to the same
                     file, the .orig file will  be  written  only
                     for  the  first  patch.  When the -o outfile
                     option is also specified, file.orig will not
                     be  created  but, if outfile already exists,
                     outfile.orig will be created.

     -c              Interprets  the  patch  file  as  a  context
                     difference  (the  output of the command diff
                     when the -c or -C options are specified).

     -d dir          Changes the current directory to dir  before
                     processing as described in EXTENDED DESCRIP-

     -D define       Marks changes with the C  preprocessor  con-

                     #ifdef define

     The option-argument define will be used as the differentiat-
     ing symbol.

     -e              Interprets the patch file as an  ed  script,
                     rather than a diff script.

     -i patchfile    Reads the patch information  from  the  file
                     named  by  the  path  name patchfile, rather
                     than the standard input.

     -l              (The letter ell.)  Causes  any  sequence  of
                     blank characters in the difference script to
                     match any sequence of  blank  characters  in
                     the  input  file.  Other  characters will be
                     matched exactly.

     -n              Interprets the script as  a  normal  differ-

     -N              Ignores patches where the  differences  have
                     already   been   applied  to  the  file;  by
                     default,   already-applied    patches    are

     -o outfile      Instead of modifying the files (specified by
                     the file operand or the difference listings)
                     directly, writes a copy of the  file  refer-
                     enced  by  each  patch, with the appropriate
                     differences applied,  to  outfile.  Multiple
                     patches for a single file will be applied to
                     the  intermediate  versions  of   the   file
                     created  by  any  previous patches, and will
                     result in multiple, concatenated versions of
                     the file being written to outfile.

     -p num          For all path names in the  patch  file  that
                     indicate  the  names of files to be patched,
                     deletes num path name  components  from  the
                     beginning  of  each  path  name. If the path
                     name in the  patch  file  is  absolute,  any
                     leading  slashes  are  considered  the first
                     component (that is, -p 1 removes the leading
                     slashes).  Specifying  -p  0 causes the full
                     path name to be used. If -p  is  not  speci-
                     fied, only the basename (the final path name
                     component) is used.

     -R              Reverses the sense of the patch script. That
                     is,  assumes  that the difference script was
                     created from the new version to the old ver-
                     sion.  The  -R option cannot be used with ed
                     scripts. patch attempts to reverse each por-
                     tion  of  the  script  before  applying  it.
                     Rejected  differences  will  be   saved   in
                     swapped format. If this option is not speci-
                     fied, and until a portion of the patch  file
                     is  successfully  applied, patch attempts to
                     apply each portion in its reversed sense  as
                     well  as in its normal sense. If the attempt
                     is successful, the user will be prompted  to
                     determine if the -R option should be set.

     -r rejectfile   Overrides the default reject file  name.  In
                     the  default case, the reject file will have
                     the same name as the output file,  with  the
                     suffix .rej appended to it. See Patch Appli-

     -u              Interprets the patch file as a unified  con-
                     text  difference, that is, the output of the
                     command diff when the -u or -U  options  are

     The following operand is supported:

     file     A path name of a file to patch.

     The -R option will not work with ed scripts because there is
     too little information to reconstruct the reverse operation.

     The -p option makes it possible to customize a patch file to
     local user directory structures without manually editing the
     patch file. For example, if the file name in the patch  file
     was /curds/whey/src/blurfl/blurfl.c:

       o  Setting -p 0 gives the entire path name unmodified.

       o  Setting -p 1 gives:


       o  Without the leading slash, -p 4 gives:


       o  Not specifying -p at all gives:


     When using -b in some file system implementations, the  sav-
     ing  of  a  .orig  file may produce unwanted results. In the
     case of 12-, 13-, or 14-character file names, on  file  sys-
     tems  supporting  14-character maximum file names, the .orig
     file will overwrite the new file.

     See environ(5) for descriptions of the following environment
     variables  that affect the execution of patch: LANG, LC_ALL,

     The output of patch the save files (.orig suffixes) and  the
     reject files (.rej suffixes) will be text files.

     A patch file may contain patching instructions for more than
     one  file.  File  names are determined as specified in Patch
     Determination. When the -b option  is  specified,  for  each
     patched  file,  the  original will be saved in a file of the
     same name with the suffix .orig appended to it.

     For each patched file, a reject file may also be created  as
     noted  in Patch Application. In the absence of an -r option,
     the name of this file will be formed by appending the suffix
     .rej to the original file name.

  Patch File Format
     The patch file must contain zero or  more  lines  of  header
     information followed by one or more patches. Each patch must
     contain zero or more lines of file  name  identification  in
     the format produced by diff -c, and one or more sets of diff
     output, which are customarily called hunks.

     patch recognizes the  following  expression  in  the  header

     Index:pathname          The file  to  be  patched  is  named

     If all lines (including headers) within a patch  begin  with
     the  same  leading  sequence of blank characters, patch will
     remove this sequence before proceeding. Within  each  patch,
     if  the  type of difference is context, patch recognizes the
     following expressions:

     *** filename timestamp

         The patches arose from filename.

     --- filename timestamp

         The patches should be applied to filename.

     Each hunk within a patch must be the diff output to change a
     line  range  within  the original file. The line numbers for
     successive hunks within a  patch  must  occur  in  ascending

  File Name Determination
     If no file operand is specified, patch performs the  follow-
     ing steps to obtain a path name:

         If the patch contains the strings  ***  and  ---,  patch
         strips  components  from the beginning of each path name
         (depending on the presence or value of the  -p  option),
         then  tests  for  the  existence  of  both  files in the
         current directory (or directory specified  with  the  -d

     2.  If both files exist, patch assumes that no path name can
         be  obtained  from  this step. If the header information
         contains a line with the  string  Index:,  patch  strips
         components  from the beginning of the path name (depend-
         ing on -p), then tests for the existence of this file in
         the  current  directory (or directory specified with the
         -d option).

     3.  If an SCCS directory exists in  the  current  directory,
         patch  will  attempt to perform a get -e SCCS/s.filename
         command to retrieve an editable version of the file.

     4.  If no path name can be obtained by applying the previous
         steps, or if the path names obtained do not exist, patch
         will write a prompt to standard  output  and  request  a
         file name interactively from standard input.

  Patch Application
     If the -c, -e, -n, or  -u  option  is  present,  patch  will
     interpret  information within each hunk as a context differ-
     ence, an ed difference, a normal difference,  or  a  unified
     context  difference,  respectively. In the absence of any of
     these options, patch determines the type of difference based
     on the format of information within the hunk.

     For each hunk, patch begins to search for the place to apply
     the  patch  at the line number at the beginning of the hunk,
     plus or minus any offset used in applying the previous hunk.
     If  lines  matching  the  hunk  context are not found, patch
     scans both forwards and backwards at least 1000 bytes for  a
     set of lines that match the hunk context.

     If no such place is found and it is  a  context  difference,
     then  another  scan  will take place, ignoring the first and
     last line of context. If that fails, the first two and  last
     two  lines  of context will be ignored and another scan will
     be made. Implementations may  search  more  extensively  for
     installation locations.

     If no location can be found, patch will append the  hunk  to
     the  reject  file.  The  rejected  hunk  will  be written in
     context-difference format regardless of the  format  of  the
     patch  file.  If the input was a normal or ed -style differ-
     ence, the reject file  may  contain  differences  with  zero
     lines  of  context.  The  line  numbers  on the hunks in the
     reject file may be different from the line  numbers  in  the
     patch file since they will reflect the approximate locations
     for the failed hunks in the new file  rather  than  the  old

     If the type of patch is an ed diff, the  implementation  may
     accomplish the patching by invoking the ed command.

     The following exit values are returned:

     0        Successful completion.

     1        One or more lines were written to a reject file.

     >1       An error occurred.

     See attributes(5) for descriptions of the  following  attri-

    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    | Availability                | SUNWcsu                     |
    | Interface Stability         | Standard                    |

     ed(1), diff(1), attributes(5), environ(5), standards(5)

Man pages from Solaris 10 Update 8. See docs.sun.com and www.oracle.com for further documentation and Solaris information.