Backing up data with rsync

I recently discovered a tool which turned out to be useful for backing up my local folders, namely: rsync. It’s a straightforward command-line utility that makes it really easy to maintain a mirror of local data on any distant support. Basic usage for this purpose is:

$ rsync -auvz --delete ./local-folder/ /mnt/remote-folder/

Where:

  • -a stands for "archive" mode (preserve permissions, dates, etc.),
  • -u stands for "update" only, i.e. don’t re-send or overwrite newer files,
  • -v stands for "verbose", so we can see a list of files being processed,
  • -z enables file compression for faster transfers,
  • --delete means we delete files that don’t exist any more in the local folder.

The verbose mode enabled by -v is not necessary depending on your use case. These other parameters can also come in handy:

  • --exclude can be used to specify files or filename patterns to ignore,
  • --progress displays a progression bar, e.g. to check that a big file transfer is not hanging.

Check out man rsync for more details and options.

Trailing slashes

The only thing to be careful about with rsync is the addition, or not, of a trailing slash. If there is no trailing slash, the corresponding object is treated as a target, while if there is a trailing slash, the corresponding object is treated as a directory containing the target files. It's clearer with an example: suppose we have a directory foo containing the file README, and we want to sync it to a directory bar. If we do:

$ rsync -auvz ./foo ./bar/

Then foo will be copied to the target location bar/, and we will end up with the following file tree:

./foo
./foo/README
./bar/
./bar/foo
./bar/foo/README

On the contrary, if we do:

$ rsync -auvz ./foo/ ./bar/

Then the content of foo is synced with the content of bar, and we get:

./foo
./foo/README
./bar/
./bar/README

So, make sure that the source and destination folders are consistent trailing-slash-wise.

© Stéphane Caron — All content on this website is licensed under the CC BY 4.0 license.
π