#!/bin/bash
# Backupscript
#  Das Script synchronisiert mit "rsync" saemtliche $QUELLEN nach $ZIEL/JJMMTT. 
#  Es koennen auch per SSH Daten von entfernen Systemen empfangen werden
#  Als Basis fuer das inkrementelle Backup dient die letzte verfuegbare Version.
#  Um bei Abbruechen unnötige Doppelspeicherungen zu umgehen einfach das
#  abgebrochene Backup unter $ZIEL/JJMMTT loeschen und Backup erneut starten.
#
#  Hinweis:
#  Das Script überprüft nicht, ob im Zielverzeichnis genügend freier Speicher
#  vorhanden ist. Fehler bei den Eingabeparametern fängt das Script nicht ab.
#  Die Tagesordner werden aus Gründen der Sicherheit nicht automatisch gelöscht.
#  Da jeweils nur geänderte Dateien gesichert werden hält sich die Datenmenge
#  jedoch in Grenzen.
#
# aus: 


# Parameter, Wichtig: ZIEL und QUELLEN jeweils mit "/" beenden
#ZIEL="/media/sda6/DATA/Html/Joomla-BkUp/" # Zielordner auf lokalem Rechner (z.B. Backupmedium)
ZIEL="/media/sda6/DATA/Html/Joomla/"   # 
#QUELLEN="/media/sda6/DATA/Html/Joomla/"   # Quellen auf lokalem Rechner 
QUELLEN="/media/sda6/DATA/Html/Joomla-BkUp/" # 
RSYNC=""
INC=""
SSHUSER=""
SSHHOST=""
#RSYNC="--delete"                          # RSYNC-Parameter (z.B. zusaetzlich --exclude=.*)
#SSHUSER="user"                           # Benutzer auf zu sichernden Remote-Rechner  (optional)
#SSHHOST="rechner"                        # zu sichernder Rechner mit SSH-Zugriff      (optional)

### hier keine Aenderungen mehr vornehmen ###

# Die Zeile
# LASTBACKUP=/bin/ls -d $ZIEL* | /usr/bin/sort -r | /usr/bin/head -1
# sollte besser auf
# LASTBACKUP=/bin/ls -d $ZIEL[[:digit:]]* | /usr/bin/sort -r | /usr/bin/head -1
# oder dergleichen geändert werden, sonst versucht das Skript bei einer externen 
# Festplatte, die neueren, zu sichernden Files auf lost+found zu linken, was 
# wieder zu einem kompletten Backup führt; es sei denn, man löscht lost+found...
# Im obigen Beispiel werden mit dem ls nur Verzeichnisse angezeigt, die aus 
# Zahlen bestehen...

#LASTBACKUP=`/bin/ls -d $ZIEL* | /usr/bin/sort -r | /usr/bin/head -1`  
LASTBACKUP=`/bin/ls -d $Quellen* | /usr/bin/sort  | /usr/bin/head -1`  
#LASTBACKUP=`/bin/ls -d $ZIEL[[:digit:]]* | /usr/bin/sort -r | /usr/bin/head -1`  
DATUM=`/bin/date +%y%m%d`

echo "LastBackup: $LASTBACKUP"
echo "Ziel: $ZIEL, Quellen: $QUELLEN"
#/bin/echo "$QUELLEN"

for QUELLE in `/bin/echo $QUELLEN`
#for QUELLE in $QUELLEN
do

#echo "AAA, Quellen: $QUELLEN, Quelle: $QUELLE"
   if [ "$LASTBACKUP" ]; then
      INC="--link-dest=$QUELLE$LASTBACKUP"
#      INC="--link-dest=$LASTBACKUP$QUELLE"
   fi

   if [ "$SSHUSER" ] && [ "$SSHHOST" ]; then 
      REMOTEQUELLE="$SSHUSER@$SSHHOST:$QUELLE"
   else
      REMOTEQUELLE=$QUELLE
   fi
#exit
   `/bin/mkdir -p $ZIEL$DATUM$QUELLE`     # Erzeugen Verzeichnisstruktur ohne Fehlerkontrolle
   BEFEHL="/usr/bin/rsync -auv $RSYNC $INC $REMOTEQUELLE $ZIEL$DATUM$QUELLE"
   /bin/echo "Quelle: $QUELLE, Befehl: $BEFEHL"
   #$BEFEHL

done


