rsync everything
There are lots of great tutorials about rsync. This is not intended to be one of them. Instead its a glorified cheat sheet, a reminder of the syntax and switches when I realise I have once again forgotten them.
Basics
rsync -azP source/ destination
Fun with flags
-a
: archive, this combines recursive syncing (-r
) with the preservation of symbolic links, special and device files, modification times, groups, owners, and permissions.-z
: adds compression which reduces network transfer.-P
: this is another combination flag, this time covering--progress
and--partial
giving you both a progress bar and the ability to resume an interrupted transfer.
Trailing slashes:
Add a trailing slash if you want to sync the contents of your source directory to your destination one. Without it the folder itself will be sunk resulting in a destination/source/source-contents
folder structure.
Testing
Not sure you’ve got your command right? Lets do a dry run to see
rsync -anv source/ destination
Fun with flags:
-n
: this is the bit that tells rsync to do a dry run-v
: verbose, useful if you want to actually know the outcome
Remote sync
One of the main strengths of rsync is the ability to transfer files between local and remote systems
rsync -azP source username@location:destination
If you have ~/.ssh/config
set up you can also do
rsync -azP hostname:source destination
Excluding things
Exclude a specific file
rsync -azP --exclude 'file.txt' source destination
or directory
rsync -azP --exclude 'dir' source destination
or just the contents of the directory
rsync -azP --exclude 'dir/*' source destination
multiple files/directories
rsync -azP --exclude={'file.txt', 'dir', 'file1.md', 'dir2'} source destination
This last one is getting a bit complicated, so if you’re doing this you might whatn to use an exclude file instead:
rsync -azP --exclude-from='exclude-file.txt' source destination
Then in your exclude file:
file1.txt
file2.txt
dir
dir/*