Linux: rsync Tutorial
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/ firstname.lastname@example.org:~/
This will copy the local dir
~/web/ to the remote dir
~/ on the machine with domain name “example.org”, using login “joe” via the ssh protocol.
rsync on windows path
on Microsoft Windows, the path with drive letter:
should be replaced by
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.
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/ email@example.com:~/
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,
*.javacmeans all files ending in
- 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/ firstname.lastname@example.org:~/web/
-r is used instead of
-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]
rsync remote to local
Here's a example of reverse direction.
rsync -z -a -v -t --rsh="ssh -l joe" email@example.com:~/web/ ~/
This will get everything from the remote machine, to local machine.
Linux: Compare Files or Directory: diff