rsync(1) -rltvv --exclude='*.zip' --exclude='*.tar.gz' --exclude='*.tgz' --exclude='*.jar' --exclude='*.deb' -e ssh --rsync-path="sudo rsync" /source/files/ user@destination-host:/destination/files/ 2>&1 > ~/log.txt &
a fast, versatile, remote (and local) file-copying tool
-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
       alias.
-l, --links
       When symlinks are encountered, recreate the symlink on the destination.
-t, --times
       This tells rsync to transfer modification times along with the files and update them on the remote
       system.   Note that if this option is not used, the optimization that excludes files that have not
       been modified cannot be effective; in other words, a missing -t or -a will cause the next transfer
       to  behave  as  if  it  used  -I,  causing  all files to be updated (though rsync’s delta-transfer
       algorithm will make the update fairly efficient if the files haven’t actually changed, you’re much
       better off using -t).
-v, --verbose
       This  option  increases  the amount of information you are given during the transfer.  By default,
       rsync works silently. A single -v will give you information about what files are being transferred
       and  a  brief summary at the end. Two -v options will give you information on what files are being
       skipped and slightly more information at the end. More than two -v options should only be used  if
       you are debugging rsync.

       Note that the names of the transferred files that are output are done using a default --out-format
       of "%n%L", which tells you just the name of the file and, if the item is a link, where it  points.
       At  the  single  -v  level  of  verbosity,  this  does not mention when a file gets its attributes
       changed.  If you ask for an itemized list  of  changed  attributes  (either  --itemize-changes  or
       adding  "%i"  to  the  --out-format  setting), the output (on the client) increases to mention all
       items that are changed in any way.  See the --out-format option for more details.
--exclude=PATTERN
       This  option is a simplified form of the --filter option that defaults to an exclude rule and does
       not allow the full rule-parsing syntax of normal filter rules.

       See the FILTER RULES section for detailed information on this option.
-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
file.)

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.
--rsync-path=PROGRAM
       Use this to specify what program is to be run on the remote machine to start-up rsync.  Often used
       when  rsync  is  not  in the default remote-shell’s path (e.g. --rsync-path=/usr/local/bin/rsync).
       Note that PROGRAM is run with the help of a shell, so it can be any program,  script,  or  command
       sequence  you’d  care  to  run, so long as it does not corrupt the standard-in & standard-out that
       rsync is using to communicate.

       One tricky example is to set a different default directory on the remote machine for use with  the
       --relative option.  For instance:

                  rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/
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
Before a command is executed, its input and output may be redirected using a special notation interpreted
by  the  shell.   Redirection  may  also  be used to open and close files for the current shell execution
environment.  The following redirection operators may precede or appear anywhere within a simple  command
or may follow a command.  Redirections are processed in the order they appear, from left to right.

Redirecting Output
    Redirection of output causes the file whose name results from the expansion of  word  to  be  opened  for
    writing  on  file descriptor n, or the standard output (file descriptor 1) if n is not specified.  If the
    file does not exist it is created; if it does exist it is truncated to zero size.

    The general format for redirecting output is:

           [n]>word

    If the redirection operator is >, and the noclobber option to the  set  builtin  has  been  enabled,  the
    redirection  will  fail if the file whose name results from the expansion of word exists and is a regular
    file.  If the redirection operator is >|, or the redirection operator is > and the  noclobber  option  to
    the  set  builtin  command  is  not  enabled, the redirection is attempted even if the file named by word
    exists.
If a command is terminated by the control operator &, the shell executes the command in the background in
a subshell.  The shell does not wait for the command to finish, and the return  status  is  0.
source manpages: rsync