rsync(1) -ahW --no-compress -info=progress2 source dest
a fast, versatile, remote (and local) file-copying tool
-a, --archive
       This is equivalent to -rlptgoD. It is a quick way  of  saying  you  want  recursion  and  want  to
       preserve  almost  everything  (with -H being a notable omission).  The only exception to the above
       equivalence is when --files-from is specified, in which case -r is not implied.

       Note that -a does not preserve hardlinks, because finding multiply-linked files is expensive.  You
       must separately specify -H.
-h, --human-readable
       Output numbers in a more human-readable format.  This makes big numbers output using larger units,
       with  a  K,  M,  or  G  suffix.   If  this  option was specified once, these units are K (1000), M
       (1000*1000), and G (1000*1000*1000); if the option is repeated,  the  units  are  powers  of  1024
       instead of 1000.
-W, --whole-file
       With  this  option  rsync’s  delta-transfer algorithm is not used and the whole file is sent as-is
       instead.  The transfer may be faster if this option is used when the bandwidth between the  source
       and  destination  machines  is  higher  than  the bandwidth to disk (especially when the "disk" is
       actually a networked filesystem).  This is the default when both the source  and  destination  are
       specified as local paths, but only if no batch-writing option is in effect.
Local:  rsync [OPTION...] SRC... [DEST]

Access via remote shell:
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

Access via rsync daemon:
  Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
        rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
-i, --itemize-changes
       Requests  a  simple  itemized  list  of  the  changes  that are being made to each file, including
       attribute changes.  This is exactly the same as specifying --out-format='%i %n%L'.  If you  repeat
       the  option,  unchanged  files  will  also  be output, but only if the receiving rsync is at least
       version 2.6.7 (you can use -vv with older versions of rsync, but that also turns on the output  of
       other verbose messages).

              The  "%i"  escape  has  a  cryptic output that is 11 letters long.  The general format is like the
              string YXcstpoguax, where Y is replaced by the type of update being done, X  is  replaced  by  the
              file-type,  and  the  other  letters  represent  attributes  that  may be output if they are being

              The update types that replace the Y are as follows:

              o      A < means that a file is being transferred to the remote host (sent).

              o      A > means that a file is being transferred to the local host (received).

              o      A c means that a local change/creation is occurring for the item (such as the creation of a
                     directory or the changing of a symlink, etc.).

              o      A h means that the item is a hard link to another item (requires --hard-links).

              o      A  .  means  that  the  item is not being updated (though it might have attributes that are
                     being modified).

              o      A * means that the rest of the itemized-output area contains a message (e.g. "deleting").

              The file-types that replace the X are: f for a file, a d for a directory, an L for a symlink, a  D
              for a device, and a S for a special file (e.g. named sockets and fifos).

              The other letters in the string above are the actual letters that will be output if the associated
              attribute for the item is being updated or a "." for no change.  Three exceptions to this are: (1)
              a newly created item replaces each letter with a "+", (2) an identical item replaces the dots with
              spaces, and (3) an unknown attribute replaces each letter with a "?" (this can happen when talking
              to an older rsync).

              The attribute that is associated with each letter is as follows:

              o      A c means either that a regular file has a different checksum (requires --checksum) or that
                     a symlink, device, or special file has a changed value.  Note that if you are sending files
                     to  an  rsync  prior to 3.0.1, this change flag will be present only for checksum-differing
                     regular files.

              o      A s means the size of a regular file is different and will be updated by the file transfer.

              o      A t means the modification time is different and is being updated  to  the  sender’s  value
                     (requires  --times).   An alternate value of T means that the modification time will be set
                     to the transfer time, which happens when a file/symlink/device is updated  without  --times
                     and  when  a  symlink is changed and the receiver can’t set its time.  (Note: when using an
                     rsync 3.0.0 client, you might see the s flag combined with t instead of the proper  T  flag
                     for this time-setting failure.)

              o      A  p  means  the  permissions  are  different  and  are being updated to the sender’s value
                     (requires --perms).

              o      An o means the owner is different and is being updated  to  the  sender’s  value  (requires
                     --owner and super-user privileges).

              o      A  g  means  the  group  is  different and is being updated to the sender’s value (requires
                     --group and the authority to set the group).

              o      The u slot is reserved for future use.

              o      The a means that the ACL information changed.

              o      The x means that the extended attribute information changed.

              One other output is possible:  when deleting files, the "%i" will output  the  string  "*deleting"
              for  each  item that is being removed (assuming that you are talking to a recent enough rsync that
              it logs deletions instead of outputting them as a verbose message).
-n, --dry-run
       This makes rsync perform a trial run that doesn’t make any changes (and produces mostly  the  same
       output  as a real run).  It is most commonly used in combination with the -v, --verbose and/or -i,
       --itemize-changes options to see what an rsync command is going to do before one actually runs it.

       The output of --itemize-changes is supposed to be exactly the same on a dry run and  a  subsequent
       real  run  (barring  intentional  trickery  and  system call failures); if it isn’t, that’s a bug.
       Other output should be mostly unchanged, but may differ in some areas.  Notably, a  dry  run  does
       not send the actual data for file transfers, so --progress has no effect, the "bytes sent", "bytes
       received", "literal data", and "matched data" statistics are too small, and the "speedup" value is
       equivalent to a run where no file transfers were needed.
-f, --filter=RULE
       This option allows you to add rules to selectively exclude certain files from the list of files to
       be transferred. This is most useful in combination with a recursive transfer.

       You may use as many --filter options on the command line as you like to build up the list of files
       to exclude.  If the filter contains whitespace, be sure to quote it so that the  shell  gives  the
       rule  to  rsync as a single argument.  The text below also mentions that you can use an underscore
       to replace the space that separates a rule from its arg.

       See the FILTER RULES section for detailed information on this option.
-o, --owner
       This option causes rsync to set the owner of the destination file to be the  same  as  the  source
       file,  but  only  if  the receiving rsync is being run as the super-user (see also the --super and
       --fake-super options).  Without this option, the owner of new and/or transferred files are set  to
       the invoking user on the receiving side.

       The preservation of ownership will associate matching names by default, but may fall back to using
       the ID number in some circumstances (see also the --numeric-ids option for a full discussion).
-p, --perms
       This option causes the receiving rsync to set the destination permissions to be the  same  as  the
       source  permissions.   (See also the --chmod option for a way to modify what rsync considers to be
       the source permissions.)

       When this option is off, permissions are set as follows:

       o      Existing files (including updated files) retain  their  existing  permissions,  though  the
              --executability option might change just the execute permission for the file.

       o      New  files  get  their "normal" permission bits set to the source file’s permissions masked
              with the receiving directory’s default permissions (either the receiving  process’s  umask,
              or  the  permissions  specified  via  the  destination  directory’s default ACL), and their
              special permission bits disabled except in the case where a new directory inherits a setgid
              bit from its parent directory.

              Thus,  when --perms and --executability are both disabled, rsync’s behavior is the same as that of
              other file-copy utilities, such as cp(1) and tar(1).

              In summary: to give destination files (both old and new) the source permissions, use --perms.   To
              give  new files the destination-default permissions (while leaving existing files unchanged), make
              sure that the --perms option is off and use --chmod=ugo=rwX (which  ensures  that  all  non-masked
              bits  get enabled).  If you’d care to make this latter behavior easier to type, you could define a
              popt alias for it, such as putting this line in the file ~/.popt (the  following  defines  the  -Z
              option, and includes --no-g to use the default group of the destination dir):

                 rsync alias -Z --no-p --no-g --chmod=ugo=rwX

              You could then use this new option in a command such as this one:

                 rsync -avZ src/ dest/

              (Caveat:  make  sure  that  -a  does  not follow -Z, or it will re-enable the two "--no-*" options
              mentioned above.)

              The preservation of the destination’s setgid bit on newly-created directories when --perms is  off
              was added in rsync 2.6.7.  Older rsync versions erroneously preserved the three special permission
              bits for newly-created files when --perms was off, while overriding the destination’s  setgid  bit
              setting on a newly-created directory.  Default ACL observance was added to the ACL patch for rsync
              2.6.7, so older (or non-ACL-enabled) rsyncs use the umask even if default ACLs are present.  (Keep
              in mind that it is the version of the receiving rsync that affects these behaviors.)
-r, --recursive
       This tells rsync to copy directories recursively.  See also --dirs (-d).

       Beginning with rsync 3.0.0, the recursive algorithm used is now an incremental scan that uses much
       less memory than before and begins the transfer after the scanning of the  first  few  directories
       have  been  completed.   This  incremental scan only affects our recursion algorithm, and does not
       change a non-recursive transfer.  It is also only possible when both ends of the transfer  are  at
       least version 3.0.0.

       Some  options  require  rsync to know the full file list, so these options disable the incremental
       recursion  mode.   These  include:  --delete-before,   --delete-after,   --prune-empty-dirs,   and
       --delay-updates.   Because  of  this,  the  default  delete  mode when you specify --delete is now
       --delete-during when both ends of the connection are at least 3.0.0 (use --del or  --delete-during
       to  request this improved deletion mode explicitly).  See also the --delete-delay option that is a
       better choice than using --delete-after.

       Incremental recursion can be disabled using the --no-inc-recursive option or its shorter  --no-i-r
-g, --group
       This option causes rsync to set the group of the destination file to be the  same  as  the  source
       file.  If the receiving program is not running as the super-user (or if --no-super was specified),
       only groups that the invoking user on the receiving  side  is  a  member  of  will  be  preserved.
       Without  this  option, the group is set to the default group of the invoking user on the receiving

       The preservation of group information will associate matching names by default, but may fall  back
       to  using  the  ID  number  in  some  circumstances  (see also the --numeric-ids option for a full
-e, --rsh=COMMAND
       This option allows you to choose an alternative remote shell  program  to  use  for  communication
       between  the  local  and  remote  copies  of  rsync.  Typically, rsync is configured to use ssh by
       default, but you may prefer to use rsh on a local network.

       If this option is used with [user@]host::module/path, then the remote shell COMMAND will  be  used
       to  run  an  rsync daemon on the remote host, and all data will be transmitted through that remote
       shell connection, rather than through a direct socket connection to a running rsync daemon on  the
       remote host.  See the section "USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION" above.

       Command-line  arguments  are permitted in COMMAND provided that COMMAND is presented to rsync as a
       single argument.  You must use spaces (not tabs or other whitespace) to separate the  command  and
       args  from  each  other,  and  you  can  use single- and/or double-quotes to preserve spaces in an
       argument (but not backslashes).  Note that doubling a single-quote inside a  single-quoted  string
       gives  you  a  single-quote; likewise for double-quotes (though you need to pay attention to which
       quotes your shell is parsing and which quotes rsync is parsing).  Some examples:

    -e 'ssh -p 2234'
    -e 'ssh -o "ProxyCommand nohup ssh firewall nc -w1 %h %p"'

(Note that ssh users can alternately customize site-specific connect options in their  .ssh/config

You  can  also  choose  the  remote  shell program using the RSYNC_RSH environment variable, which
accepts the same range of values as -e.

See also the --blocking-io option which is affected by this option.
-s, --protect-args
       This  option  sends all filenames and most options to the remote rsync without allowing the remote
       shell to interpret them.  This means that spaces are not split  in  names,  and  any  non-wildcard
       special  characters  are not translated (such as ~, $, ;, &, etc.).  Wildcards are expanded on the
       remote host by rsync (instead of the shell doing it).

       If you use this option with --iconv, the args related to the remote side will also  be  translated
       from  the  local  to  the  remote  character-set.   The  translation happens before wild-cards are
       expanded.  See also the --files-from option.
source manpages: rsync