From 2e41d8eb52b8ea5fcf44d9d70fe017a464b24ba3 Mon Sep 17 00:00:00 2001 From: mxmehl Date: Fri, 28 Nov 2014 15:28:57 +0100 Subject: [PATCH] initial commit v1.0 --- .gitignore | 1 + bak-pars.sh | 51 ++++++++++++++++++++ bak.sh | 120 ++++++++++++++++++++++++++++++++++++++++++++++ config.cfg.sample | 11 +++++ 4 files changed, 183 insertions(+) create mode 100644 .gitignore create mode 100755 bak-pars.sh create mode 100755 bak.sh create mode 100644 config.cfg.sample diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ac285ce --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.cfg diff --git a/bak-pars.sh b/bak-pars.sh new file mode 100755 index 0000000..b50e094 --- /dev/null +++ b/bak-pars.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +################################################# +# Einfaches Shellscript zum inkrementellen Sichern von Verzeichnissen und Dateien +# Dieses Script liest mitgegebene Parameter aus und bietet keinen Prompt +# 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 +# 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 + +if [ "$1" = "" ]; then + echo "Usage: backupscript-promptless.sh NAME DIRECTORY DESTINATION k/i" + exit 0 +elif [ "$4" = "" ]; then + echo "Not enough arguments" + exit 0 +#else + #echo "Given arguments: $1 $2 $3 $4" +fi + + +# Test ob Zielspeicherort vorhanden. Wenn nicht, erstellen +if [ ! -d "$3" ]; then + mkdir $3 +fi + +# Eigentliche Backuproutine +if [ "$4" = "k" ]; then + #Komplettes Backup + MYDATE=complete + #Alte Timestamps löschen + rm -f "$3/$TSNAME" + #Alte Backups löschen + rm -rf "$3/$LASTMONTHDIR.$1.d" + #Neue alte Backups in Ordner verschieben + mkdir "$3/$LASTMONTHDIR.$1.d" + mv -f "$3/$1".*.tgz "$3/$LASTMONTHDIR.$1.d" +elif [ "$4" = "i" ]; then + #Inkrementelles Backup + MYDATE=$(date +%y%m%d-%H%M) +else + echo "Unknown argument. Use k or i" +fi + +#Abzug erstellen +tar czf "$3"/"$1".$MYDATE.tgz -g "$3/$TSNAME" $2 2> /dev/null diff --git a/bak.sh b/bak.sh new file mode 100755 index 0000000..c36b2ba --- /dev/null +++ b/bak.sh @@ -0,0 +1,120 @@ +#!/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 +# 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 diff --git a/config.cfg.sample b/config.cfg.sample new file mode 100644 index 0000000..8fe1f0f --- /dev/null +++ b/config.cfg.sample @@ -0,0 +1,11 @@ +# PRENAME: Name of backup +# PREDEST: Destination where backup should stored in +# PREDIRS: Directory which should be backupped + +PRENAME[0]=name1 +PREDEST[0]=/home/user/backup/name1 +PREDIRS[0]="/home/user/documents" + +PRENAME[0]=name2 +PREDEST[0]=/home/user/backup/name2 +PREDIRS[0]="/home/user/pictures"