Rsync is a great command line program for copying and sync'ing data. It can use standard SSH protocol (default port 22) to copy files from computer to computer, or locally from one path to another. It frequently comes on linux/unix systems, but if you're using Windoze, I suggest installing Cygwin.
The first step in this tutorial is to setup passwordless SSH. Open a terminal on the computer you want to copy files from, referred to in this article as "local".
# use the ssh-keygen command to generate a public and private key # I left the passphrase empty, and used the default path: ~/.ssh/id_dsa local$ ssh-keygen -t dsa # the above command will create two files (public and private keys) local$ ls -l ~/.ssh/id_dsa* -rw------- 1 Eric staff 668 Feb 26 11:32 /Users/Eric/.ssh/id_dsa -rw-r--r-- 1 Eric staff 611 Feb 26 11:32 /Users/Eric/.ssh/id_dsa.pub
SCP the public key file (id_dsa.pub) to the computer that will receive the files, referred to as "remote".
# NOTE: you'll need to replace "Eric@remote" with your remote username and IP address local$ scp ~/.ssh/id_dsa.pub Eric@remote:~/.ssh/id_dsa.pub.transferred
SSH to the remote system and execute a few commands to enable passwordless SSH
$ SSH to remote system local$ ssh Eric@remote # append public key to "authorized_keys" remote$ cat ~/.ssh/id_dsa.pub.transferred >> ~/.ssh/authorized_keys # remove obsolete public key remote$ rm ~/.ssh/id_dsa.pub.transferred # exit remote system remote$ exit
To verify that the public/private keys are working, SSH to the remote system. You should not be prompted for a password this time.
The second step of this tutorial is creating an executable shell script that will transfer the files. I chose to put my scripts in the folder "~/scripts/", but you could put them anywhere you want.
Open up your favorite text editor (emacs, vi, nano, etc) and enter your rsync command.
#!/bin/bash rsync -avz --delete /path/on/local/computer/ Eric@remote:/path/on/remote/computer/
Please note, the "--delete" flag is optional, and will remove files on the remote computer that do not exist on the local computer. Please use caution.
For my real life example, I setup a script to rsync my iTunes library from my iMac to my MacBookPro.
#!/bin/bash rsync -avz --delete --exclude '*.m4v' --exclude '*.mp4' ~/Music/iTunes/ Eric@remote:~/Music/iTunes/
After saving the script, set it to be executable using chmod.
local$ chmod u+x /path/to/local/rsync.script.sh
Test your script on the command line, and then SSH to the remote computer to verify the copied files.
If all is working well, you can setup a cron job to run at your desired time interval. Remember, both computers must be running for this to be automated, so choose a time you know they'll both be on. For example, to run this script daily..
local$ crontab -e # min hour dayMonth month dayWeek command 0 0 * * * /path/to/local/rsync.script.sh