rsync 🔁

"rsync is an open source utility that provides fast incremental file transfer. rsync is freely available under the GNU General Public License and is currently being maintained by Wayne Davison. "

rsync website. rsync.samba.org

So, rsync. This is definitely one of my favorite piece of software in the world! It basically is a swiss-knife tool for anything related to syncing files across folders.

Using rsync

Using rsync is super simple! Here's the command synopsis taken from its manual (man rsync):

NAME rsync - a fast, versatile, remote (and local) file-copying tool SYNOPSIS Local: rsync [OPTION...] SRC... [DEST] Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST) Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

You'll find a long list of options by reading its manual - but I'll list here the post important ones:

  • -c: compare files' checksums during sync
  • -r: sync files and dirs recursively
  • -l: copy symlinks as symlinks
  • -n: dry run (run a trial; aka. without changes)
  • -z: compress files during transfer (useful when syncing through network)
  • --progress: show progress during transfer

So, a quick-and-dirty example to sync two folders would be like that:

# Assuming there's pen drive named "pen0" mounted in `/Volumes/pen0`, here's # how you could sync files between a folder with the same name in your $HOME # First, there must be a folder to be used as destiny (it's important) mkdir /Volumes/pen0/my-files rsync -cr --progress $HOME/my-files/ /Volumes/pen0/my-files/ # PS: the forward slashes in the end of every directory name are importants too

rsync in the real world

I used rsync to automate the deployment of WordPress-based projects in the past, back in my old days of PHP/WordPress. The techniques used were shown in a presentation held during a meetup of PHP-PB in April 2017. The ideas in this setup are still useful today:

https://speakerdeck.com/joeljuca/wordpress-at-meetup-php-pb