This is an example for copying data from a local server to a remote server (push).
# cd / (starting directory)
# rysnc -avhP local_directory user@1.1.1.1:/remote_directory
-a = archive mode; equals -rlptgoD
-v = verbose
-h = human readable
-P = show progress
Example: To copy the /home directory from local server to remote server:
rysnc -avhP home admin@1.1.1.1:/
NOTE: admin must be a root user. This also assumes SSH port is 22 with PermitRootLogin=yes
This is an example for copying data from a remote server to a local server (pull).
# cd / (starting directory)
# rysnc -avhP user@1.1.1.1:/remote_directory local_directory
Other rsync options:
| -v, –verbose | increase verbosity |
| -q, –quiet | suppress non-error messages |
| –no-motd | suppress daemon-mode MOTD (see caveat) |
| -c, –checksum | skip based on checksum, not mod-time & size |
| -a, –archive | archive mode; equals -rlptgoD (no -H,-A,-X) |
| –no-OPTION | turn off an implied OPTION (e.g. –no-D) |
| -r, –recursive | recurse into directories |
| -R, –relative | use relative path names |
| –no-implied-dirs | don’t send implied dirs with –relative |
| -b, –backup | make backups (see –suffix & –backup-dir) |
| –backup-dir=DIR | make backups into hierarchy based in DIR |
| –suffix=SUFFIX | backup suffix (default ~ w/o –backup-dir) |
| -u, –update | skip files that are newer on the receiver |
| –inplace | update destination files in-place |
| –append | append data onto shorter files |
| –append-verify | –append w/old data in file checksum |
| -d, –dirs | transfer directories without recursing |
| -l, –links | copy symlinks as symlinks |
| -L, –copy-links | transform symlink into referent file/dir |
| –copy-unsafe-links | only “unsafe” symlinks are transformed |
| –safe-links | ignore symlinks that point outside the tree |
| -k, –copy-dirlinks | transform symlink to dir into referent dir |
| -K, –keep-dirlinks | treat symlinked dir on receiver as dir |
| -H, –hard-links | preserve hard links |
| -p, –perms | preserve permissions |
| -E, –executability | preserve executability |
| –chmod=CHMOD | affect file and/or directory permissions |
| -A, –acls | preserve ACLs (implies -p) |
| -X, –xattrs | preserve extended attributes |
| -o, –owner | preserve owner (super-user only) |
| -g, –group | preserve group |
| –devices | preserve device files (super-user only) |
| –specials | preserve special files |
| -D | same as –devices –specials |
| -t, –times | preserve modification times |
| -O, –omit-dir-times | omit directories from –times |
| –super | receiver attempts super-user activities |
| –fake-super | store/recover privileged attrs using xattrs |
| -S, –sparse | handle sparse files efficiently |
| -n, –dry-run | perform a trial run with no changes made |
| -W, –whole-file | copy files whole (w/o delta-xfer algorithm) |
| -x, –one-file-system | don’t cross filesystem boundaries |
| -B, –block-size=SIZE | force a fixed checksum block-size |
| -e, –rsh=COMMAND | specify the remote shell to use |
| –rsync-path=PROGRAM | specify the rsync to run on remote machine |
| –existing | skip creating new files on receiver |
| –ignore-existing | skip updating files that exist on receiver |
| –remove-source-files | sender removes synchronized files (non-dir) |
| –del | an alias for –delete-during |
| –delete | delete extraneous files from dest dirs |
| –delete-before | receiver deletes before transfer, not during |
| –delete-during | receiver deletes during the transfer |
| –delete-delay | find deletions during, delete after |
| –delete-after | receiver deletes after transfer, not during |
| –delete-excluded | also delete excluded files from dest dirs |
| –ignore-errors | delete even if there are I/O errors |
| –force | force deletion of dirs even if not empty |
| –max-delete=NUM | don’t delete more than NUM files |
| –max-size=SIZE | don’t transfer any file larger than SIZE |
| –min-size=SIZE | don’t transfer any file smaller than SIZE |
| –partial | keep partially transferred files |
| –partial-dir=DIR | put a partially transferred file into DIR |
| –delay-updates | put all updated files into place at end |
| -m, –prune-empty-dirs | prune empty directory chains from file-list |
| –numeric-ids | don’t map uid/gid values by user/group name |
| –timeout=SECONDS | set I/O timeout in seconds |
| –contimeout=SECONDS | set daemon connection timeout in seconds |
| -I, –ignore-times | don’t skip files that match size and time |
| –size-only | skip files that match in size |
| –modify-window=NUM | compare mod-times with reduced accuracy |
| -T, –temp-dir=DIR | create temporary files in directory DIR |
| -y, –fuzzy | find similar file for basis if no dest file |
| –compare-dest=DIR | also compare received files relative to DIR |
| –copy-dest=DIR | … and include copies of unchanged files |
| –link-dest=DIR | hardlink to files in DIR when unchanged |
| -z, –compress | compress file data during the transfer |
| –compress-level=NUM | explicitly set compression level |
| –skip-compress=LIST | skip compressing files with suffix in LIST |
| -C, –cvs-exclude | auto-ignore files in the same way CVS does |
| -f, –filter=RULE | add a file-filtering RULE |
| -F | same as –filter=’dir-merge /.rsync-filter’repeated: –filter=’- .rsync-filter’ |
| –exclude=PATTERN | exclude files matching PATTERN |
| –exclude-from=FILE | read exclude patterns from FILE |
| –include=PATTERN | don’t exclude files matching PATTERN |
| –include-from=FILE | read include patterns from FILE |
| –files-from=FILE | read list of source-file names from FILE |
| -0, –from0 | all *from/filter files are delimited by 0s |
| -s, –protect-args | no space-splitting; wildcard chars only |
| –address=ADDRESS | bind address for outgoing socket to daemon |
| –port=PORT | specify double-colon alternate port number |
| –sockopts=OPTIONS | specify custom TCP options |
| –blocking-io | use blocking I/O for the remote shell |
| –stats | give some file-transfer stats |
| -8, –8-bit-output | leave high-bit chars unescaped in output |
| -h, –human-readable | output numbers in a human-readable format |
| –progress | show progress during transfer |
| -P | same as –partial –progress |
| -i, –itemize-changes | output a change-summary for all updates |
| –out-format=FORMAT | output updates using the specified FORMAT |
| –log-file=FILE | log what we’re doing to the specified FILE |
| –log-file-format=FMT | log updates using the specified FMT |
| –password-file=FILE | read daemon-access password from FILE |
| –list-only | list the files instead of copying them |
| –bwlimit=KBPS | limit I/O bandwidth; KBytes per second |
| –write-batch=FILE | write a batched update to FILE |
| –only-write-batch=FILE | like –write-batch but w/o updating dest |
| –read-batch=FILE | read a batched update from FILE |
| –protocol=NUM | force an older protocol version to be used |
| –iconv=CONVERT_SPEC | request charset conversion of filenames |
| –checksum-seed=NUM | set block/file checksum seed (advanced) |
| -4, –ipv4 | prefer IPv4 |
| -6, –ipv6 | prefer IPv6 |
| –version | print version number |
| -h, –help | show help |

