OR
rsync [options] path [user@]host:path
The rsync remote-update protocol allows rsync to transfer just the differences between two sets of files across the network link, using an efficient checksum-search algorithm described in the technical report that accompanies this package.
Some of the additional features of rsync are:
- support for copying links, devices, owners, groups and permissions
- exclude and exclude-from options similar to GNU tar
- a CVS exclude mode for ignoring the same files that CVS would ignore
- can use any transparent remote shell, including rsh or ssh
- does not require root privilages
- pipelining of file transfers to minimise latency costs
See the file README for installation instructions.
Once installed you can use rsync to any machine that you can use rsh to. rsync uses rsh for its communications, unless both the source and destination are local.
You can also specify a alternative to rsh, by either using the -e command line option, or by setting the RSYNC_RSH environment variable.
One common substitute is to use ssh, which offers a high degree of security.
You use rsync in the same way you use rcp. You must specify a source and a destination, one of which must be remote.
Perhaps the best way to explain the syntax is some examples:
rsync *.c foo:src/
this would transfer all files matching the pattern *.c from the current directory to the directory src on the machine foo. If any of the files already exist on the remote system then the rsync remote-update protocol is used to update the file by sending only the differences. See the tech report for details.
rsync -avz foo:src/bar /data/tmp
recursively transfer all files from the directory src/bar on the machine foo into the /data/tmp/bar directory on the local machine. The files are transferred in "archive" mode, which ensures that symbolic links, devices, attributes, permissions, ownerships etc are preserved in the transfer. Additionally compression will be used to reduce the size of data portions of the transfer.
You can also use rsync in local-only mode, where both the source and destination don't have a ':' in the name. In this case it behaves like an improved copy command.
Here are some examples of how I use rsync.
To backup my wifes home directory, which consists of large MS word files and mail folders I use a cron job that runs
rsync -Cavz . arvidsjaur:backup
each night over a PPP link to a duplicate directory on my machine "arvidsjaur".
To synchronise my samba source trees I use the following Makefile targets:
get:
rsync -avuzb --exclude '*~' samba:samba/ .
put:
rsync -Cavuzb . samba:samba/
sync: get put
this allows me to sync with a CVS directory at the other end of the link. I then do cvs operations on the remote machine, which saves a lot of time as the remote cvs protocol isn't very efficient.
I mirror a directory between my "old" and "new" ftp sites with the command
rsync -az -e ssh --delete ~ftp/pub/samba/ nimbus:"~ftp/pub/tridge/samba"
this is launched from cron every few hours.
rsync uses the GNU long options package. Many of the command line options have two varients, one short and one long. These are shown below separated by commas. Some options only have a long varient.
-h, --help
--version
-v, --verbose
-I, --ignore-times
-c, --checksum
-a, --archive
-r, --recursive
-b, --backup
-u, --update
-l, --links
-H, --hard-links
Note that rsync can only detect hard links if both parts of the link are in the list of files being sent.
-p, --perms
-o, --owner
-g, --group
-D, --devices
-t, --times
-n, --dry-run
-S, --sparse
-x, --one-file-system
--delete
It is a very good idea to run first using the dry run option (-n) to see what files would be deleted to make sure important files aren't listed.
For example, one user was burnt by the following command:
rsync -av --delete /usr/src remote:/tmp
rsync happily transferred the contents of /usr/src to /tmp/src on the destination then deleted everything else in /tmp. Nasty! It would have been even nastier if he had used his home directory instead of /tmp.
The correct way to achieve what this user probably wanted is this:
rsync -av --delete /usr/src/ remote:/tmp/src
in this case the deletions only occur inside the tree /tmp/src.
The moral of the story is to use the -n option until you get used to the behaviour of --delete.
NOTE: It also may delete files on the destination if the sending side can't open them or stat them. This is a bug that hopefully will be fixed in a future release.
-B , --block_size BLOCKSIZE
-e, --rsh COMMAND
You can also choose the remote shell program using the RSYNC_RSH environment variable.
-e, --rsync-path PATH
--exclude FILE
The option FILE can either be a file name or a shell wildcard expression. If it is a directory name then rsycn will not recurse into directories of that name.
You may use as many --exclude options on the command line as you like to build up the list of files to exclude.
If the filename is a single ! then the exclude list is reset.
--exclude-from FILE
-C, --cvs-exclude
The exclude list is initialised to:
then files listed in a $HOME/.cvsignore are added to the list and any files listed in the CVSIGNORE environment variable (space delimited).
Finally in each directory any files listed in the .cvsignore file in that directory are added to the list.
--suffix SUFFIX
--csum-length LENGTH
You can choose the number of bytes in the truncated checksum using the --csum-length option. Any value less than or equal to 16 is valid.
Note that if you use this option then you run the risk of ending up with a incorrect target file. The risk with a value of 16 is microscopic and can be safely ignored (the universe will probably end before it fails) but with smaller values the risk is higher.
-z, --compress
Note this this option typically achieves better compression ratios that can be achieved by using a compressing remote shell, or a compressing transport, as it takes advantage of the implicit information sent for matching data blocks.
user ids and group ids are transferred using their numerical value
times are transferred as unix time_t values
file permissions, devices etc are transferred as native numerical values
see also the comments on the -delete option
This man page is current for version 1.5 of rsync
rsync was written by Andrew Tridgell and Paul Mackerras. They may be contacted via email at Andrew.Tridgell@anu.edu.au and Paul.Mackerras@cs.anu.edu.au
rsync is distributed under the GNU public license. See the file COPYING for details.
The primary ftp site for rsync is ftp://samba.anu.edu.au/pub/rsync.
We would be delighted to hear from you if you like this program.
This program uses the zlib compression library written by Jean-loup Gailly and Mark Adler.
Thanks to Richard Brent, Brendan Mackay, Bill Waite, Stephen Rothwell and David Bell for helpful suggestions and testing of rsync. I've proabably missed some people, my apologies if I have.