Help! I'm rsync-ing

What is rsync

We can run the whatis rsync command to get a short description without opening the man page

rsync (1)            - a fast, versatile, remote (and local) file-copying tool

Rsync is the ultimate tool for copying files and is loved by many people. It offers many advantages over traditional methods like SCP or FTP which are linear file transfer tools. Rsync checks the delta of files between the source and the destination and only transfers the difference. Additionally it allows an option for easy compression of files before they are sent over the network.

Example usage

Say I have a folder of movies in my home directory on this computer that I wanted to copy to another machine I have ssh access to called fry. To do this I could use the command:

rsync -avz ~/Movies user@fry:~/Videos/

First let me cover what these options mean.

-a, --archive
    Archive basically tells rsync to copy (and preserve) everything about the source files
    except hardlinks and extended attributes.
    It will also tell rsync to recurse into directories (-r).

-v, --verbose
    Prints out files to the stdout so you can see what's happening

-z, --compress
    Compresses data during transfer

As far as specifying directories, if it is on the local machine, use the regular path to the directory. If you are using a remote machine (ssh) as the source or destination, you will have to specify a hostname at minimum and optionally a user, protocol, and port to use followed by a colon (:) and the desired path. To use the rsync daemon, just add another colon (::).

One thing to note is if you are using -a or -r, you will be recursing into that directory. So just watch out if your source is a directory, the trailing forward slash will mean different things.

If it is not present (like in the example) the directory itself will be copied to the destination.

If it is present, the contents of that directory will be copied to the destination.

More useful options

-h, --human-readable
    Shows file sizes in appropriate measurements (MB, GB, TB, etc.)

-P, --partial and --progress
    This will show you a progress bar with files as they are transferred and will save partial files.

-n, --dry-run
    Test out an operation before you actually do it.

-u, --update
    Will skip files that are newer on receiver

-C, --cvs-exclude
    Skips folders for version control such as .git and other binary, object and temp files (see FILTER RULES)

While these may be the most common, there are many many more options for rsync and I recommend checking out the man page if you feel the urge.