Linux: Sync Across Machines, rsync

By Xah Lee. Date: . Last updated: .

rsync is a command line util that lets you do one-way copying/updating from one machine to another.

The remote machine must also have rsync installed. (it's installed by default in linux)

rsync -z -a -v -t --rsh="ssh -l joe" ~/web/

This will copy the local dir ~/web/ to the remote dir ~/ on the machine with domain name “”, using login “joe” via the ssh protocol.

Here's what the options mean:

Archived mode, basically making the file's meta data (owner/perm/timestamp) same as the local file (when possible) and do recursive (i.e. Upload the whole dir).
Use compression for transmission. (compress files first, transmit, uncompress. This saves bandwidth.)
Verbose mode. Print out which files is being updated.
Copy timestamp from source to destination. If you don't, rsync will basically update every file. Timestamp is used by rsync to check if file's been updated. -a implies -t.

For example, here's what i use to sync/upload my website on my local machine to my server.

rsync -z -a -v -t --exclude="*~"  --exclude=".DS_Store" --exclude=".bash_history"  --exclude="*/_curves_robert_yates/*.png" --exclude="logs/*"  --exclude="xlogs/*" --delete --rsh="ssh -l joe" ~/web/
Ignore file names that matches glob_pattern in source directory. (i.e. If it matches, don't upload it, nor delete it on remote server) For example, *.javac means all files ending in .javac
If a file/dir in destination is not in source directory, delete it.

Here's a example of syncing Windows and Mac.

rsync -z -r -v --delete --rsh="ssh -l xah" ~/web/ xah@

Note that -r is used instead of -a. The -r means recursive, all sub directories and files. Don't use -a because that will sync file owner, group, permissions, and others, but because Windows and unix have different permission systems and file systems, so -a is usually not what you want.

[see Linux: File Permission System]

Reverse Direction

Here's a example of reverse direction.

rsync -z -a -v -t --rsh="ssh -l joe" ~/

This will get everything from the remote machine, to local machine.

Two-way Synchronize with Unison

How to Use Unison for Syncing Files (Unison tutorial)

Downloading a Entire Website

Linux: Download Website: wget, curl

Compare Directories

[see Linux: Compare Files or Directory: diff]

Linux Shell Basics

Sys Admin


Linux Desktop