remsync - remotely synchronize file trees

     remsync -sxv tree [state-file]
     remsync -duxvD tree [state-file [diff-file]]
     remsync [-xv] tree [diff-file]

     Remsync synchronizes file trees of distant machines, i.e.  machines  that
     do  not  have a fast network between them.  It accomplishes this in three

          Create a state file containing a description of the  machine  to  be

          Compute a file of differences on the source machine using the  state
          file to compare the two file trees.

          Update the target machine using the data in the differences file.

     This process requires that you move two files,  a  state  file  from  the
     target  machine  to  the  source machine, and a differences file from the
     source machine to the target machine.  The state file is  an  ASCII  file
     that  may  be  edited,  usually to make remsync ignore some files or file

     The argument tree may be a single file or a directory.   A  directory  is
     traversed  recursively.  The state-file and diff-file arguments may be of
     any file type.  The differences file contains an end marker, so it may be
     followed  by  trailing  junk.   Standard input or output is used if these
     arguments are omitted or replaced by a minus sign.

  State file format
     A state file has a line for each file in a tree.  A line looks like  this
     formally for a simple file:

          name mode owner group length date [link-number [last]]

     The best way to show how each type of file is represented is by example:

          /         d755    0   0
          bin       d755    2   0
            [         644     2   0   233   759160857   1
            cat       755     2   0   3772  768742021
            test      755     2   0   233   759160857   1   last
          dev       d755    0   0
            fd0       b666    0   0   200
            console   c600    10  0   400
            sd2       b600    0   0   a02
            fifo      p700    2   0
          opt       ->      usr/opt
          usr       ignore (Cross-device link)

     The root of the tree is always represented by a /, no matter what type of
     file  it may be.  Directory entries of the root follow at the same level.
     Files in subdirectories are indented by two spaces.   (Eight  spaces  are
     replaced  by a TAB.)  Normal files have their length and modified time in
     the state file, devices have their device number in hex, etc.   If  files
     are hard linked to each other then they all get an extra "link number" to
     bind them together.  The last link is marked with the word last.

     One usually only modifies a state file to ignore differences between  two
     files.   One  does  this  by  replacing the file attributes with the word
     ignore.  (Remsync generates this keyword too, with the reason  why  added
     in parentheses.)


     -s   Generate a state file.

     -d   Generate a differences file.  (The default is to apply a differences

     -u   Only add new files or update files with newer versions.

     -x   Do not cross device boundaries.  This allows one to operate  on  the
          root file system for instance ignoring the /usr file system.

     -D   Debug differences file generation.  With this flag no file  contents
          are  added  to  the  differences  file.   The  result  is then human

     -v   Lists the commands added to the differences  file,  or  the  actions
          done  applying  a  differences  file.   The  output  looks like UNIX
          commands  except  for  the  words  "add",  "restore"  and   "update"
          indicating  addition  of  a new file, replacing a file with an older
          version, or replacement by a newer version.

     Actions taken by the author to update his notebook "finiah" from his main
     machine "darask":

          finiah# remsync -s /usr /tmp/finiah.state

          Edit the state file to ignore .Xauthority files and /usr/var.

          finiah# tar cvf /dev/fd0 /tmp/finiah.state

          darask# tar xvf /dev/fd0
          darask# remsync -dv /usr /tmp/finiah.state | vol 1440 /dev/fd0

          finiah# vol 1440 /dev/fd0 | remsync -v /usr

     One could add a file compression/decompression  program  between  remsync
     and  vol,  to  reduce  the  number  of  floppies  to move about, but that
     actually slows things down!  (Note that one only  needs  to  shuffle  two
     floppies  about  if  the  two  machines are adjacent.  To update a remote
     machine it does make sense to use compression to  reduce  the  number  of
     floppies to carry.)

     synctree(1), vol(1), tar(1).

     Nothing stops you from using remsync  over  a  fast  network  of  course.
     Synctree  can  be  a  bit tedious if you only want to ignore a few files.
     Editing a state file is then easier.

     Files are overwritten, not removed, when they are  updated.   This  means
     that  links  outside  the  tree  are  also  updated.   The less desirable
     alternative to this is to break the link before the update.

     The verbose option may say that a link is to be  created  when  making  a
     differences  file.  The link is often already there when the update takes
     place, so no action is taken, and thus no talk about it.  So you may miss
     a few mutterings about links if you compare the messages.

     Kees J. Bot (