I recently had to setup an automatic backup scheme for a desktop Windows PC used for office tasks. I usually try to avoid complicated backup software that tend to store the backups in a proprietary format. I want to be able to browse the files in the backup, and copy one file to recover the content.
On UNIX/Linux I use rsync and thanks to Cygwin I was able to do the same thing on Windows. The goal for the script was :
Must backup two directories into one directory located on an USB key drive
Must not delete any file in the backup
Must always keep the old versions of any updated file
Here is a bash script that backups two directories foo1 and foo2
#!/bin/sh SRCDIR="/cygdrive/c/links/foo1 /cygdrive/c/links/foo2" DESTDIR="/cygdrive/J/backupdir" OLDBDIR="old."`date +%F` rsync -avb --backup-dir=$OLDBDIR --modify-window=2 $SRCDIR $DESTDIR
linksactually is a symlink to the directory that contains foo1 and foo2. I created this symlink with the ln -s command as the path to the parent directory of foo1 and foo2 had spaces and I didn’t want to deal with path escaping issues.
--modify-window=2is necessary on windows, else the whole set of file is saved all the time.
--deletecan be added to the rsync command if we want the deleted files to be removed from the backup
Then a .bat file is created in order to run the script with a double click :
set PATH=%PATH%;/cygdrive/c/cygwin/bin bash.exe backup.sh