back to linux

The rsync command can be useful when working on different computers. There are many ways to use rsync but here we will consider only 2 cases :

Let's consider a working folder /home/user/workstuff on computer 1 and a backup path on an external drive /media/user/workstuff. The folder workstuff may contain subfolders.

We first create 5 files in the working folder, and we would like to update the backup folder with these new files. As rsync is a very powerful tool, it can be destructive if the command is not double-checked. To prevent disasters, the -n option can be useful as it shows what rsync would do but do not perform any changes. The -r option makes rsync recursive so that all the content of the folder is synchronized. The / at the end of the source path indicates that we would like to synchronize the whole content of this folder.

# create 5 empty files in the working folder
touch file{1..5}.py
# try the command without performing changes (-v option is for verbose)
rsync -rvn /home/user/workstuff/ /media/user/workstuff
# now do it !
rsync -r /home/user/workstuff/ /media/user/workstuff
# check it as worked
ls /media/user/workstuff
file1.py  file2.py  file3.py  file4.py  file5.py

Now, what occurs if we delete a file in the local folder. We will see that, in the default behavior the file is not deleted in the backup folder. To delete the file we have to explicitly tell it to rsync with the -delete option :

cd /home/user/workstuff
rm file2.py
rsync -r /home/user/workstuff/ /media/user/workstuff
# file2.py has not been deleted in backup folder
ls /media/user/workstuff
file1.py  file2.py  file3.py  file4.py  file5.py
# now explicitely specify to delete deleted files (check only)
rsync -rnv --delete /home/user/workstuff/ /media/user/workstuff
# now do it and check it's done
rsync -r --delete /home/user/workstuff/ /media/user/workstuff
ls /media/user/workstuff
file1.py  file3.py  file4.py  file5.py

We can test rsync in the other direction, to for example, restore the local folder with backup folder content. To make some changes in the backup folder, we will create a new file and delete an existing one.

cd /media/user/workstuff
rm file4.py
touch file6.py
rsync -r --delete /media/user/workstuff/ /home/user/workstuff
# check that everything went fine 
ls  /home/user/workstuff
file1.py  file3.py  file5.py  file6.py

To make a full synchronization, the archive mode -a should be used. It is equivalent to -rlptgoD (no -H,-A,-X) which is recursive, preserves links, permissions, times, group, owner …, v is for verbose :

rsync -av path/to/dir path/to/syncdir

This page is inspired from this tutorial.