rsync

rsync and slashes

Rsync will do things differently based on how you add a slash to the source.

Let's say you have two directories: src and dest, and that src has a file named document.txt in it.

You have two options: Use rsync to copy the entire folder of src with its contents, or copy the contents alone without the folder.

Here's how each would look:

Copy the entire directory:

rsync -r src dest
ls dest/src/document.txt

Copy the contents of the directory:

rsync -r src/ dest
ls dest/document.txt

Use the second example if you want to copy all files, including dot files in the directory.

If you want to ignore the dotfiles, then use an * to exclude those:

touch src/.dotfile.txt
rsync -r src/* dest

Copy files to keep them as close to the original as possible

rsync --archive --times foo:src/bar /data/tmp

Add some options for large transfers

Keep a log of transfers

rsync --log-file=/tmp/rsync.log
Display progress
rsync --progress
Compress as copying files
rsync --compress
Exclude files
rsync --exclude 'foo-bar*'
Exclude files and delete them on the destination
rsync --exclude 'foo-bar*' --delete-excluded
Specify rsync path

When using SSH to connect to a remote server, it will drop the PATH to /bin:/usr/bin by default. If rsync is not in that path, set the path manually:

rsync --rsync-path=/usr/local/bin/rsync