7th May, 2013

rsync your project to your web server

First, we need to check you have rsync on your development machine (not your production server). To check, open up a terminal and type

rsync --version

You should get a little message back that looks like this:

rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/

Then some other text. If this doesn't happen, you need to install it. (Not sure where from, it was already on my Mac)

Note: I did once find a RackSpace server which wouldn't allow me to use rsync to transfer to, I had to install rsync on the server as well, let me know if you have this problem.

"Ok, I have it, now what?"

Great! I'm going to assume the following:

  1. You have a web project on your machine.

  2. You have a web server that you can access via SSH.

  3. You may have local files you do NOT wish to transfer.

  4. You are vaguely comfortable typing things into a terminal.

"Stop patronizing me, let's go"

Ok, this is what the command looks like:

rsync -vrcn --exclude-from=/path/to/exclude /local/path/to/projects/project/ username_for_server@server_ip_address:/full/path/to/project/

Copy this out and put in your text editor so we can go through it

Let's break it down:


V for Verbose. R for Recurse through directories C for use Checksum to compare the changes (for some reason this works best for me) and N means don't ACTUALLY copy anything just tell me what changes will be made.

When you're ready to copy files, use -vrc instead of -vrcn.

ALWAYS use -vrcn to check what will be copied BEFORE you copy it. This is great for seeing how out of date your production environment is.


Put the filenames of files you do not wish to transmit in a file called 'exclude' somewhere and put the full path in place of /path/to/exclude

You can use * in your exclude file as a wildcard. There are loads of tutorials on exclude files, I won't go into details here.


Change this to the full path to your project you want to copy


Change username_for_server to the username given to you by your hosting company

SERVER_IP_ADDRESS should be your IP address of the server also from your hosting company. If you have DNS set up, you can just put the domain like www.whatever.com

/full/path/to/project/ should be the directory on the server which is the online version of your local directory. If you are on shared hosting, you'll probably have to put /home/your_user_name/ at the beginning, this is fine.

Note: make sure you leave that : before you put your directory

That's it.

I like to paste my command into a text editor so I can get it right before running it in a terminal. As long as you leave that n in the -vrcn, it will always be doing a simulation not the actual copy.


The opinions expressed here are my own and not those of my employer.