99 lines
3.0 KiB
Bash
99 lines
3.0 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# # # # # # # # # # # # # # # #
|
||
|
# #
|
||
|
# DeepSpace File Backup #
|
||
|
# v0.1 #
|
||
|
# david@socialnerds.org #
|
||
|
# #
|
||
|
# # # # # # # # # # # # # # # #
|
||
|
|
||
|
## README SECTION
|
||
|
##
|
||
|
## nothing to read yet :-)
|
||
|
##
|
||
|
##
|
||
|
|
||
|
# definitions
|
||
|
configfile="/srv/scripts/filebackup.conf" # use absolut path
|
||
|
mountpath="/mnt"
|
||
|
backuppath="/srv/filebackup"
|
||
|
|
||
|
# gen timestamp
|
||
|
timestamp=$(echo $(date "+%d_%m_%C%y"))
|
||
|
|
||
|
# am i root
|
||
|
if [ "$(whoami)" != "root" ]; then
|
||
|
echo "error: only root can do this"
|
||
|
exit 1;
|
||
|
fi
|
||
|
|
||
|
# starting message with timestamp
|
||
|
echo
|
||
|
echo "info: starting deepspace filebackup on $timestamp"
|
||
|
echo
|
||
|
|
||
|
# check if configfile is there and readable
|
||
|
if [ -r $configfile ]; then
|
||
|
# read configfile
|
||
|
i=1
|
||
|
while read line; do
|
||
|
# check if first letter is a #
|
||
|
fletter=${line:0:1}
|
||
|
if [ -z "$line" ]; then
|
||
|
:
|
||
|
#echo "line $i is empty"
|
||
|
else
|
||
|
if [ $fletter == "#" ]; then
|
||
|
:
|
||
|
#echo "line $i a comment"
|
||
|
else
|
||
|
if [[ $line != *"@"*":"*";"* ]]; then
|
||
|
echo "error: line $i is not correct formated"
|
||
|
else
|
||
|
echo "info: reading config (line $i)"
|
||
|
userindex=`expr index "$line" @`
|
||
|
let userindex--
|
||
|
user=${line:0:$userindex}
|
||
|
#echo "user: $user"
|
||
|
hostindex=`expr index "$line" :`
|
||
|
let hostindex--
|
||
|
let userindex++
|
||
|
host=${line:$userindex:$(($hostindex-$userindex))}
|
||
|
#echo "host: $host"
|
||
|
passindex=`expr index "$line" ";"`
|
||
|
share=${line:$(($hostindex+1)):$(($passindex-$hostindex-2))}
|
||
|
#echo "share: $share"
|
||
|
pass=${line:$passindex}
|
||
|
#echo "password: $pass"
|
||
|
|
||
|
# check for mountpoint
|
||
|
if [ -d $mountpath/$i ]; then
|
||
|
echo "info: $mountpath/$i already exists"
|
||
|
else
|
||
|
mkdir -p $mountpath/$i
|
||
|
fi
|
||
|
echo "info: mounting $host$share to $mountpath/$i"
|
||
|
mount -t cifs -o username=$user,password=$pass //$host$share $mountpath/$i
|
||
|
# do backup
|
||
|
echo "info: creating destination folders"
|
||
|
mkdir -p $backuppath/$timestamp/$host$share/
|
||
|
echo "info: starting rsync job"
|
||
|
rsync -r $mountpath/$i/* $backuppath/$timestamp/$host$share/
|
||
|
# unmounting share
|
||
|
echo "info: unmounting $host$share"
|
||
|
umount $mountpath/$i
|
||
|
echo "info: backup done, please check if it's really there"
|
||
|
echo
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
let i++
|
||
|
done < $configfile
|
||
|
else
|
||
|
echo "error: no configfile found"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
exit 0
|