rsync(1) -aH --delete
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, --hard-links
       This  tells  rsync to look for hard-linked files in the source and link together the corresponding
       files on the destination.  Without this option, hard-linked files in the  source  are  treated  as
       though they were separate files.

       This  option does NOT necessarily ensure that the pattern of hard links on the destination exactly
       matches that on the source.  Cases in which the destination may  end  up  with  extra  hard  links
       include the following:

       o      If the destination contains extraneous hard-links (more linking than what is present in the
              source file list), the copying algorithm will not break them explicitly.  However,  if  one
              or  more  of  the paths have content differences, the normal file-update process will break
              those extra links (unless you are using the --inplace option).

       o      If you specify a --link-dest directory  that  contains  hard  links,  the  linking  of  the
              destination  files against the --link-dest files can cause some paths in the destination to
              become linked together due to the --link-dest associations.

       Note that rsync can only detect hard links between files that are inside  the  transfer  set.   If
       rsync  updates  a  file  that  has extra hard-link connections to files outside the transfer, that
       linkage will be broken.  If you are tempted to use the --inplace option to avoid this breakage, be
       very  careful  that  you  know  how  your  files are being updated so that you are certain that no
       unintended changes happen due to lingering hard links (and  see  the  --inplace  option  for  more
       caveats).

              If  incremental  recursion  is  active (see --recursive), rsync may transfer a missing hard-linked
              file before it finds that another link for that contents exists elsewhere in the hierarchy.   This
              does not affect the accuracy of the transfer (i.e. which files are hard-linked together), just its
              efficiency (i.e. copying the data for a new, early copy of a hard-linked file that could have been
              found  later in the transfer in another member of the hard-linked set of files).  One way to avoid
              this inefficiency is to disable incremental recursion using the --no-inc-recursive option.
--delete
       This tells rsync to delete extraneous files from the receiving  side  (ones  that  aren’t  on  the
       sending  side),  but  only  for  the directories that are being synchronized.  You must have asked
       rsync to send the whole directory (e.g.  "dir"  or  "dir/")  without  using  a  wildcard  for  the
       directory’s  contents  (e.g.  "dir/*")  since the wildcard is expanded by the shell and rsync thus
       gets a request to transfer individual files, not the files’  parent  directory.   Files  that  are
       excluded   from   the   transfer  are  also  excluded  from  being  deleted  unless  you  use  the
       --delete-excluded option or mark the  rules  as  only  matching  on  the  sending  side  (see  the
       include/exclude modifiers in the FILTER RULES section).

              Prior  to rsync 2.6.7, this option would have no effect unless --recursive was enabled.  Beginning
              with 2.6.7, deletions will also occur when --dirs (-d) is enabled, but only for directories  whose
              contents are being copied.

              This option can be dangerous if used incorrectly!  It is a very good idea to first try a run using
              the --dry-run option (-n) to see what files are going to be deleted.

              If the sending side detects any I/O errors, then the deletion of any files at the destination will
              be  automatically  disabled. This is to prevent temporary filesystem failures (such as NFS errors)
              on the sending side from causing a massive deletion of files on the destination.  You can override
              this with the --ignore-errors option.

              The  --delete  option  may  be combined with one of the --delete-WHEN options without conflict, as
              well as --delete-excluded.  However, if none of the --delete-WHEN  options  are  specified,  rsync
              will  choose  the  --delete-during  algorithm  when  talking  to  rsync  3.0.0  or  newer, and the
              --delete-before  algorithm  when  talking  to  an  older  rsync.   See  also  --delete-delay   and
              --delete-after.
source manpages: rsync