Adam Neat ( ) kindly contributed the following script to back up Windows machines to a Linux host, using the smbclient utility. Adam says that it is used to backup Windows 3.x and NT machines to a Linux based DAT SCSI Drive.
Adam is not proud of the coding style used here, but it works. As I like to say, "If it works and its stupid, then it is not stupid".
Another Windows backup script, contributed by Dan Tager ( ), is provided below. Dan's script also backs up Unix machines via rsh, although that could be modified to use ssh rather easily.
In this script, the string 'agnea1' is the username on the Linux machine that does the backups.
#!/bin/bash clear echo Initialising ... checkdate=`date | awk '{print $1}'` if [ -f "~agnea1/backup-dir/backup-data" ]; then echo "ERROR: No config file for today!" echo "FATAL!" exit 1 fi if [ -d "~agnea1/backup-dir/temp" ]; then echo "ERROR: No tempoary directory found!" echo echo "Attempting to create" cd ~agnea1 cd backup-dir mkdir temp echo "Directory Made - temp" fi if [ "$1" = "" ]; then echo "ERROR: enter in a machine name (ie: cdwriter)" exit 1 fi if [ "$2" = "" ]; then echo "ERROR: enter in a SMB (Lan Manager) Resource (ie: work)" exit 1 fi if [ "$3" = "" ]; then echo "ERROR: enter in an IP address for $1 (ie: 130.xxx.xxx.52)" exit 1 fi ############################################################################# # Main Section # ############################################################################# cd ~agnea1/backup-dir/temp rm -r ~agnea1/backup-dir/temp/* cd ~agnea1/backup-dir/ case "$checkdate" in Mon) echo "Backuping for Monday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete" if [ -d "~agnea1/backup-dir/Monday" ]; then echo "Directory Monday Not found ... making" mkdir ~agnea1/backup-dir/Monday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf monday.tar * echo "done ..." rm ~agnea1/backup-dir/Monday/monday.tar mv monday.tar ~agnea1/backup-dir/Monday ;; Tue) echo "Backuping for Tuesday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete" if [ -d "~agnea1/backup-dir/Tuesday" ]; then echo "Directory Tuesday Not found ... making" mkdir ~agnea1/backup-dir/Tuesday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf tuesday.tar * echo "done ..." rm ~agnea1/backup-dir/Tuesday/tuesday.tar mv tuesday.tar ~agnea1/backup-dir/Tuesday ;; Wed) echo "Backuping for Wednesday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete" if [ -d "~agnea1/backup-dir/Wednesday" ]; then echo "Directory Wednesday Not found ... making" mkdir ~agnea1/backup-dir/Wednesday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf wednesday.tar * echo "done ..." rm ~agnea1/backup-dir/Wednesday/wednesday.tar mv wednesday.tar ~agnea1/backup-dir/Wednesday ;; Thu) echo "Backuping for Thrusday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete" if [ -d "~agnea1/backup-dir/Thursday" ]; then echo "Directory Thrusday Not found ... making" mkdir ~agnea1/backup-dir/Thursday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf thursday.tar * echo "done ..." rm ~agnea1/backup-dir/Thursday/thursday.tar mv thursday.tar ~agnea1/backup-dir/Thursday ;; Fri) echo "Backuping for Friday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete" if [ -d "~agnea1/backup-dir/Friday" ]; then echo "Directory Friday Not found ... making" mkdir ~agnea1/backup-dir/Friday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf friday.tar * echo "done ..." rm ~agnea1/backup-dir/Friday/friday.tar mv friday.tar ~agnea1/backup-dir/Friday ;; *) echo "FATAL ERROR: Unknown variable passed for day" exit 1;; esac ###########
Here's Dan's backup script:
#!/bin/bash BACKDIR=3D/backup WINCMD=3D/usr/bin/smbclient function CopyWinHost(){ # tars and gzips "windows shares" to a local directory using samba's # smbclient # argument 1 is the remote host window's host name # argument 2 is the share name to be backed up echo $1,$2,$3 REMOTE=3D$1 SHARE=3D$2 DEST=3D$3 # create a tarred gzip file using samba to copy direct from a # windows pc # 12345 is a password. Needs some password even if not defined on # remote system $WINCMD \\\\$REMOTE\\$SHARE 12345 -Tc -|gzip > $DEST echo `date`": Done backing up "$REMOTE" to "$DEST echo } function CopyUnixHost(){ # tars and gzips a directory using rsh # argument 1 is the name of the remote source host # argument 2 is the full path to the remote source directory # argument 3 is the name of the local tar-gzip file. day of week # plus .tgz will be appended to argument 3 REMOTE=3D$1 SRC=3D$2 DEST=3D$3 if rsh $REMOTE tar -cf - $SRC |gzip > $DEST; then echo `date`": Done backing up "$REMOTE":"$SRC" to "$DEST else echo `date`": Error backing up "$REMOTE":"$SRC" to "$DEST fi } # $1: win=3Dbackup windows machine, unix=3Dbackup unix machine case $1 in win) # $2=3D remote windows name, $3=3Dremote share name, # $4=3Dlocal destination directory CopyWinHost $2 $3 $4;; unix) # $2 =3D remote host, $3 =3D remote directory, # $4 =3D destination name CopyUnixHost $2 $3 $4;; esac