hpux 10.20 - rdist (1)



 NAME
      rdist - remote file distribution program

 SYNOPSIS
      rdist [ -bhinqvwyMR ] [ -f distfile ] [ -d var=value ] [ -m host ] [
      label... ]
      rdist [ -bhinqvwyMR ] -c name...  [ login@]host[:dest ]

 DESCRIPTION
      rdist facilitates the maintaining of identical copies  of  files  over
      multiple  hosts. It preserves the owner, group, mode, and modification
      time of files if possible and can update programs that are executing.

      -f distfile Specify a distfile for rdist to execute. distfile contains
                  a sequence of entries that specify the files to be copied,
                  the destination hosts, and what operations to  perform  to
                  do  the  updating.  The format of distfile is described in
                  detail later.  If distfile is -,  the  standard  input  is
                  used.  If no -f option is present, the program looks first
                  for a file called distfile, then  Distfile  in  the  local
                  host's working directory to use as the input.

      -d var=value
                  Define var to have value.  The -d option is used to define
                  variable  definitions  in  the  distfile.  value can be an
                  empty string, one name, or a list  of  name  separated  by
                  tabs and/or spaces and enclosed by a pair of parentheses.

      -m host     Limit which machines  are  to  be  updated.   Multiple  -m
                  arguments  can  be  given  to limit updates to a subset of
                  hosts that are listed in the distfile.

      label       Label of a command to execute. The label must  be  defined
                  in destfile.

      -c name...  The -c option forces  rdist  to  interpret  the  remaining
                  arguments as a small distfile.  The equivalent distfile is
                  as follows.

                       ( name ... ) -> [login@]host
                            install   [dest] ;


      -n          Print the commands without executing them. This option  is
                  useful for debugging distfile.

      -q          Quiet mode. Files that are  being  modified  are  normally
                  printed on standard output. The -q option suppresses this.

      -R          Remove extraneous files. If a directory is being  updated,
                  any  files that exist on the remote host that do not exist

                  in the master directory are removed.  This is  useful  for
                  maintaining truly identical copies of directories.

      -h          Follow symbolic links. Copy the file that the link  points
                  to rather than the link itself.

      -i          Ignore unresolved  links.   rdist  will  normally  try  to
                  maintain the link structure of files being transferred and
                  warn the user if it cannot find all the links.

      -v          Verify that the files are up to date on all the hosts. Any
                  files  that are out of date will be displayed but no files
                  will be changed nor any mail sent.

      -w          Whole mode.  The  whole  file  name  is  appended  to  the
                  destination   directory  name.  Normally,  only  the  last
                  component of a name is used  when  renaming  files.   This
                  will  preserve  the directory structure of the files being
                  copied instead of flattening the directory structure.  For
                  example,  renaming  a  list  of  files  such  as ( dir1/f1
                  dir2/f2 ) to dir3  would  create  files  dir3/dir1/f1  and
                  dir3/dir2/f2 instead of dir3/f1 and dir3/f2.

      -y          Younger mode. Files are normally updated  if  their  mtime
                  and  size  (see  stat(2))  disagree.  The -y option causes
                  rdist not to update files that are younger than the master
                  copy.   This  can be used to prevent newer copies on other
                  hosts from being replaced.  A warning message  is  printed
                  for files which are newer than the master copy.

      -b          Binary comparison. Perform a binary comparison and  update
                  files  if  they  differ  rather  than  comparing dates and
                  sizes.

      -M          Check that mode, ownership, and  group  are  the  same  in
                  addition  to  any  other  form  of  comparison  that is in
                  effect.  This option will cause files to be  replaced  but
                  will only correct the problem with a directory and print a
                  warning message.

      The distfile used by rdist contains a sequence of entries that specify
      the  files to be copied, the destination hosts, and what operations to
      perform to do the updating.  Each  entry  has  one  of  the  following
      formats.

           variable_name = name_list
           [label:] source_list ->  destination_list  command_list
           [label:] source_list ::  time_stamp_file  command_list

      The first format is used for defining variables.  The second format is
      used  for distributing files to other hosts.  The third format is used

      for making lists of files on the local host  that  have  been  changed
      since some given date.  (See EXAMPLES.)

      variable_name
                Specify the name of a variable.

      name_list List of names (such as list of  hosts  or  lists  of  files)
                separated by tabs and/or spaces and enclosed by parentheses.

      source_list
                Specify a list of files and/or directories on the local host
                to  be  used as the master copy for distribution.  Each file
                in the source_list is added to a list for  changes,  if  the
                file  is  out  of  date  on  the  host that is being updated
                (second format), or if the file is newer than the time stamp
                file (third format).  source_list may contain a single name,
                or multiple  names  separated  by  tabs  and/or  spaces  and
                enclosed by parentheses.

      destination_list
                List of hosts  to  which  these  files  are  to  be  copied.
                destination_list  may  contain  a  single  name, or multiple
                names separated  by  tabs  and/or  spaces  and  enclosed  by
                parentheses.

      time_stamp_file
                Specify a given date to generate a  list  of  files  on  the
                local host that were modified since that date.

      label:    Labels are optional. They are used to identify a command for
                partial updates.

      command_list
                Specifies a list of commands to be performed.

                The command list consists of zero or more  commands  of  the
                following format.

                     install [ options] opt_dest_name;
                     notify name_list;
                     except name_list;
                     except_pat pattern_list;
                     special  name_list   string;


                The install command is used to copy out-of-date files and/or
                directories.  Each source file is copied to each host in the
                destination list.  Directories are recursively copied in the
                same  way.  opt_dest_name is an optional parameter to rename
                files.  If no install command appears in the command list or
                the  destination name is not specified, source_list is used.

                Directories in the path name will be created if they do  not
                exist  on  the  remote  host.   To help prevent disasters, a
                non-empty directory on a target will never be replaced  with
                a  regular  file  or a symbolic link.  However, under the -R
                option  a  non-empty  directory  will  be  removed  if   the
                corresponding  filename  is  completely absent on the master
                host.  The options are -b,-h,-i, and -R, and have  the  same
                semantics  as  options on the command line, except that they
                only apply to the files in the specified  source_list.   The
                login  name  used  on the destination host is the same as on
                the local host, unless the destination name is of  the  form
                "login@host".

                The notify command is used to mail the list of files updated
                (and any errors that may have occurred) to the listed names,
                in name_list.  If no @ appears in the name, the  destination
                host  is appended to the name (e.g., name1@host, name2@host,
                ...).

                The except command is used to update all of the files in the
                source list, except for the files listed in name_list.  This
                is usually used to copy everything  in  a  directory  except
                certain files.

                The except_pat command is like  the  except  command  except
                that  pattern_list  is  a  list  of regular expressions (see
                ed(1) for details).  If one of  the  patterns  matches  some
                string  within a file name, that file will be ignored.  Note
                that since the backslash (\) is a quote character,  it  must
                be  doubled  to  become  part  of  the  regular  expression.
                Variables are expanded in pattern_list but  not  shell  file
                pattern  matching  characters.   To  include a $, it must be
                escaped with the backslash.

                The special command is used to specify sh(1)  commands  that
                are  to  be  executed  on  the remote host after the file in
                name_list is updated or  installed.   If  the  name_list  is
                omitted  then  the shell commands will be executed for every
                file updated or installed.  The shell variable `FILE' is set
                to  the  current  filename  before executing the commands in
                string.  string starts and ends with double quotes  (")  and
                can  cross multiple lines in distfile.  Multiple commands to
                the shell should be separated by semi-colons (;).   Commands
                are  executed in the user's home directory on the host being
                updated.  The special command can be used, for  example,  to
                rebuild  private databases after a program has been updated.
                Shell variables cannot be used in the command because  there
                is no escape mechanism for the $ character.

      Newlines, tabs, and  blanks  are  only  used  as  separators  and  are
      otherwise ignored. Comments begin with # and end with a newline.

      A generalized way of dynamically building variable lists  is  provided
      by  using  a  backquote  syntax  much  like  the  shell.  In this way,
      arbitrary commands that generate stdout with space-separated words may
      be  used  to  build  the  list  (see  the  use  of  cat command in the
      examples).

      Variables to be expanded begin with $ followed by  the  variable  name
      enclosed in curly braces.

      The shell meta-characters [, ], {, }, *,  and  ?  are  recognized  and
      expanded (on the local host only) in the same way as csh(1).  They can
      be escaped with a backslash.  The ~ character is also expanded in  the
      same  way  as  csh  but  is  expanded  separately  on  the  local  and
      destination hosts.  When the -w option is used with a file  name  that
      begins with ~, everything except the home directory is appended to the
      destination name.  File names which do not begin with / or ~  use  the
      destination  user's  home directory as the root directory for the rest
      of the file name.

 EXAMPLES
      The following is a small example.

           HOSTS = ( matisse root@arpa )

           FILES = ( /usr/lib /usr/bin /usr/local/games
                /usr/include/{*.h,{sys,rpc*,arpa}/*.h}
                /usr/man/man? `cat ./std-files` )

           EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc
                sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont )

           ${FILES} -> ${HOSTS}
                install -R ;
                except /usr/lib/${EXLIB} ;
                except /usr/local/games/lib ;
                special /usr/sbin/sendmail " /usr/sbin/sendmail -bz" ;

           srcs:
           /usr/local/src -> arpa
                except_pat ( \\.o$ /SCCS\$ ) ;

           IMAGEN = (ips dviimp catdvi)

           imagen:
           /usr/local/${IMAGEN} -> arpa
                install /usr/local/lib ;
                notify ralph ;

           ${FILES} :: stamp.cory
                notify root@cory ;


 AUTHOR
      rdist was developed by the University of California, Berkeley.

 FILES
      distfile                      Input command file.
      /tmp/rdist*                   Temporary file for update lists.

 HISTORY
      rdist appeared in the 4.3 Berkeley Software Distribution.

 SEE ALSO
      sh(1), csh(1), stat(2)

 DIAGNOSTICS
      A complaint about mismatch of rdist version numbers may mean  that  an
      executable rdist is not in the shell's path on the remote system.

 BUGS
      Source files must reside on the local host where rdist is executed.

      There is no easy way to have a  special  command  executed  after  all
      files in a directory have been updated.

      Variable expansion only works  for  name  lists  and  in  the  special
      command string;  there should be a general macro facility.

      rdist aborts on files that have a negative mtime (before Jan 1, 1970).

      rdist does carry the atime when installing a file but will preserve it
      on an updated file.

      There should be a `force' option to  allow  replacement  of  non-empty
      directories by regular files or symlinks.