Not that all of the other responses aren’t good solutions, I think the best solution is rsync.
rsync
Prereqs: You must have rsync installed on the localsystem and have ssh access on the remote system (scp).
My first rsync example will be simple. If you put this in a script, you will get a very simple result. All of the files in the local directory will be copied to the remote directory. Then, each consecutive time you run the command it will update the files on the remote side.
/usr/bin/rsync -ru /path/to/dir/ remote:/path/to/dir
The next example will add preserving all datestamps, timestamps, permissions, uids/gids, etc (you need to be root for this though).
/usr/bin/rsync -aru /path/to/dir/ remote:/path/to/dir
Here is a neat little trick. Lets say she deleted her xmas pictures directory by accident and you need to restore:
/usr/bin/rsync -ru remote:/path/to/dir/pics/xmas /path/to/dir/pics
Note: rsync will never delete files, it will only overwrite existing files. What I typically do for deleting files is use two rsync scripts. One that runs as often as hourly for some of my production SMB fileservers at work, then another that runs maybe weekly (after the tape backups). What this script line will do is delete files on the remote side that have been deleted locally.
/usr/bin/rsync -ru --delete /path/to/dir/ remote:/path/to/dir
Finally, some logging so that somebody knows what has been going on. I typically use this stuff for backing up filesystems or even for syncing my backup dumps to a central server, so I want the verbose option to throw what it did in a log message and shoot it to me via email. I’m pretty sure the below command works, I’d have to reference one of my backup scripts to be sure the syntax is perfect, but you get the idea.
/usr/bin/rsync -ruv /path/to/dir/ remote:/path/to/dir | mail -s “Subject Line Message” myemail@mydomain.com