How-To Synchronize Files Using “rsync” Command
Placing several backups in a safe place and keeping files synchronized either locally or remotely is an urgent necessity for all users whose everyday tasks solely rely on the use of computers. Hard drives get damaged, files get deleted, memory sticks get lost …etc. You have to make synchronized backups of your stuff!
Many backup applications are there. Some are GUI-based, while others run through the command line. Personally, I prefer to use the command line due to its high flexibility. One of the most widely used command for synchronization purposes has been the rsync command.
By the way, one of the reasons behind my migration from Windows to Linux was the lack of the FREE synchronization tools that run under Windows. Anyway, if I start talking about this again I won’t finish, and I already wrote about this in an earlier post. So, let’s start talking about “rsync” command.
rsync
rsync is an open source utility that provides fast incremental file transfer. “rsync” is freely available under the GNU General Public License
Features
Features of rsync are already mentioned in different sites, but this is how I see it:
- Incremental File Transfer
- Compression while Transferring
- Synchronizing Remote Machines
- Encrypted and Secure
- Better Alternative to FTP
- Very Flexible
Uses
If you have a look at the rsync manual you will notice a huge number of arguments, and that might discourage you from using the command. Well, don’t worry! All those arguments are for advanced usages, and as the synchronization process gets more complex you will need to understand more arguments and when to use them; otherwise, you only need to used to little arguments to do you the job. Therefore , you will find yourself running the same command over and over with same arguments all the time.
Here is the Generic Syntax:
rsync [options] Src Dst
Where Src and Dst respectively are:
Src: Source location from where files will be synchronized. Dst: Destination location to where files will be synchronized.
Src and Dst can hold these location combinations except for Remote to Remote directories:
| Src | Dst |
| Local | Local |
| Local | Remote |
| Remote | Local |
Local: "/directory" Remote: "username@hostname:"
Note: Remote Directory will be the HOME directory of the username used at the Remote machine by default!
Full Sync
A full synchronization process implies what is in this table will take place:
| Command | Process | Current Directory | Sub-Directories |
| rsync | Create | Yes | Yes |
| Update | |||
| Delete |
A very frequently used arguments with “rsync” command:
rsync -avz -u --progress --delete Src Dst -n
| -a | Archive mode |
| -v | Verbose mode |
| -z | Compress while transferring files. This will make the transferring faster and will save the network bandwidth |
| -u | Update files which are newer in the Src |
| --progress | Show the transfer progress of each file while transferring |
| --delete | Delete files from Dst if they don’t exist in Src |
| -n | Preview mode. Changes won’t take effect till this argument is omitted |
Sync, without Sub-Directories
One of the syncing tasks I perform on a daily basis is that I sometimes want to sync a certain directory without syncing the subdirectories. This is how I do it:
rsync -dvz -u --progress --delete Src Dst -n
If you want the same effect that the argument ‘-a’ have, such as preserving links, owner, group …etc. Then, this is another option:
rsync -dlptgoDvz -u --progress --delete Src Dst -n
Arguments Worthy Looking at
| --exclude=PATTERN | exclude files matching PATTERN |
| --include=PATTERN | don’t exclude files matching PATTERN |
| --existing | skip creating new files on receiver |
| --ignore-existing | skip updating files that exist on receiver |
Important Notes
- Synchronization process always works from Src to Dst. So, Any change in the Src will be reflected in the Dst.
- A probable confusing matter here is the deleted files. Just remember, a deleted file in the Src will be deleted from the Dst, but any file deleted from the Dst will be recreated from the Src while syncing!
- As a rule of thumb, always make the necessary modification in the Src then sync it with the Dst.
- Be careful with the Trailing Slash. If the Trailing Slash appears, then content of that directory will be synced, otherwise, that directory AND its content will be synced. Try it out and see what happens!
Too Many Arguments!!
If you found any difficulty in using the proper arguments of rsync command due to their numbers, then I suggest you start with GUI rsync Application called Grsync. The good thing about it is that it shows you the arguments that are going to be used to perform the synchronization process!



Good description and the colored tables really help. Nice job.
I’m sooooo flattered
Thanks a lot.
Lovely article! Thanks for making this.
I appreciate the comment..
Thanks a lot
Great post. Just what I needed to make it usable.
Glad that my post has helped
Excellent use of color and graphics, very clearly written. A+!
Alex, Thank you so much for your comment..
Nice article, clear ti understand. Thanks
Thanks Husain. I’m using this on my Mac with an external Raid5.