Files
incremental-backup/bak.sh

121 lines
3.4 KiB
Bash
Raw Normal View History

2014-11-28 15:28:57 +01:00
#!/bin/bash
#################################################
# Einfaches Shellscript zum inkrementellen Sichern von Verzeichnissen und Dateien
# Basiert auf dem Backupscript von Max Kalus: http://www.auxnet.de/blog/blog-post/2008/10/27/taegliches-inkrementelles-backup-mit-cron-und-tar-unter-linux.html
#
# Geschrieben von Max Mehl <mail@mehl.mx>
# This application is Free Software under a GNU GPL 3.0-Licence
#################################################
# Festgelegte Variablen, müssen nicht geändert werden
LASTMONTHDIR=lastmonth
TSNAME=timestamp.snar
# Test if config.cfg exists and set needed variables
if [ ! -e config.cfg ]; then echo "Missing config.cfg file. Edit and rename config.cfg.sample"; exit 1; fi
source config.cfg
## FUNKTIONEN
# Hilfetext, wird aufgerufen mit helptext
helptext() {
unset NAME DEST DIRS KI NUM # Setze Variablen zurück
echo "Available options:"
echo " +-------------------------------------+"
echo " | h - Gib diesen Hilfetext aus |"
echo " | q - Beende |"
echo " | p - Wähle aus vordefinierten Backups|"
echo " | m - Backup manuell eingeben |"
echo "+--------------------------------------+"
}
helptext
check() {
# Komplett oder inkrementell?
echo "Soll ein Komplettbackup mit Archivierung alter Backups gemacht werden oder ein inkrementelles?"
read -p "k für Komplett, i für Inkrementell: " KI
# Prüfe Variablen auf Richtigkeit
if ! ([ $KI = "k" ] || [ $KI = "i" ]); then
echo "Ungueltige Eingabe. k oder i wird erwartet."
elif [ ! -e $DIRS ]; then
echo "Angegebenes zu sichernde(s) Verzeichnis/Datei existiert nicht."
else
backup
fi
helptext
}
backup() {
# Test ob Zielspeicherort vorhanden. Wenn nicht, erstellen
if [ ! -d "$DEST" ]; then
mkdir $DEST
fi
# Eigentliche Backuproutine
if [ "$KI" = "k" ]; then
#Komplettes Backup
MYDATE=complete
#Alte Timestamps löschen
rm -f "$DEST/$TSNAME"
#Alte Backups löschen
rm -rf "$DEST/$LASTMONTHDIR.$NAME.d"
#Neue alte Backups in Ordner verschieben
mkdir "$DEST/$LASTMONTHDIR.$NAME.d"
mv -f "$DEST/$NAME".*.tgz "$DEST/$LASTMONTHDIR.$NAME.d"
elif [ "$KI" = "i" ]; then
#Inkrementelles Backup
MYDATE=$(date +%y%m%d-%H%M)
fi
#Abzug erstellen
tar czf "$DEST"/"$NAME".$MYDATE.tgz -g "$DEST/$TSNAME" $DIRS 2> /dev/null
}
## SCHLEIFE
while :
do
#tput clear # Schirm loeschen und Menuetext ausgeben
echo -n "What to do? h for help: "
read INPUT
case $INPUT in
h) helptext
echo "";;
q) echo "Bye!" && exit 1
echo "";;
p) echo "Folgende vordefinierten Backups stehen zur Auswahl:"
# Geht Arrays mit vordefinierten Backups durch
for ((i = 0; i < ${#PRENAME[*]}; i++))
do
echo "$i: Bezeichnung: "${PRENAME[$i]}" mit dem zu speichernden Pfad "${PREDIRS[$i]}" und dem Zielspeicherort "${PREDEST[$i]}"."
echo ""
done
# Liest Nummer des vordefinierten Backups ein
read -p "Welches Backup soll ausgewählt werden? Bitte Nummer eingeben: " NUM
# Variablen werden dementsprechend gesetzt für Backupjob
NAME="${PRENAME[$NUM]}"
DEST="${PREDEST[$NUM]}"
DIRS="${PREDIRS[$NUM]}"
# Check starten, dieser startet dann Backup
check
echo "";;
m) echo "Bitte Backupdaten eingeben:"
read -p "Bezeichnung des Backups: " NAME
read -p "Zielspeicherort: " DEST
read -p "Zu sicherndes Verzeichnis: " DIRS
# Check starten, dieser startet dann Backup
check
echo "";;
*) echo "Falsche Eingabe!"
echo "";;
esac
done