#!/bin/bash
-# vim: tabstop=8 colorcolumn=80
-## @fn usage()
-## @brief Zeigt die Hilfe an
+errlog()
+{
+ local lastexit=$?
+ local msg="$1"
+
+ echo "â ERROR: $msg"
+ echo "đ EXIT: $lastexit"
+ return $lastexit
+}
+
useage()
{
- echo "restore -d <Datum> -n <Nummer> -r <Rechner> -p <Pfad>"
+ echo "$0 -d <Datum> -n <Nummer> -r <Rechner> -p <Pfad>"
echo
echo " -d Datum von der Sicherung"
echo " -n Nummer von der Sicherung"
echo
}
-## @fn SetDefaultVariables()
-## @brief setzt defaults
-SetDefaultVariables()
+print_line()
+{
+ for i in {1..80}; do
+ printf "#"
+ done
+
+ printf "\n"
+}
+
+restore()
{
- backpath="/images/backup"
- backname="sicherung"
+ local date="$1"
+ local number="$2"
+ local machine="$3"
+ local path="$4"
+ local backup_root="/images/backup"
+ local backup_name="sicherung"
+
+ local remote_user=${machine%%@*}
+ local remote_machine=${machine%:*}
+ local remote_machine=${remote_machine#*@}
+ local remote_port=${machine##*:}
+ local backup_dir="$date"_"$number"_"$backup_name"
+
+ local restore_path="$backup_root/$backup_dir/$remote_machine$path"
+ local remote_path="$remote_user@$remote_machine:$path"
+
+ echo "âšī¸ INFO: restore path $restore_path"
+ echo "âšī¸ INFO: remote path $remote_path"
+ echo
+
+ local ask_restore="N"
+ read -p "â QUESTION: Do you want restore? [N/y] " ask_restore
+ local ask_restore=${ask_restore:-N}
+ local ask_restore=${ask_restore,,}
+ echo ${ask_restore,,}
+
+ [ "$ask_restore" == "y" ] \
+ || errlog "you want not do restore" \
+ || return $?
+
+ echo "âšī¸ INFO: restoring..."
+
+ rsync --archive \
+ --verbose \
+ --sparse \
+ --acls \
+ --hard-links \
+ --human-readable \
+ --rsh "ssh -p $remote_port" \
+ $restore_path \
+ $remote_path \
+ || errlog "could not restore" \
+ || return $?
+
+ echo "âšī¸ INFO: restored"
}
-## @fn ReadArguments()
-## @brief Einlesung der Konsolenargumente
-## @param Konsolenargumente
-ReadArguments()
+main()
{
+ local date=
+ local number=
+ local machine=
+ local path=
+
+ echo "â START: restore"
+
+ head -2 license
+ echo
+
while getopts "d:n:r:p:h" optname; do
case "$optname" in
"d")
- datum="$OPTARG"
+ date="$OPTARG"
;;
"n")
number="$OPTARG"
;;
"r")
- rechner="$OPTARG"
+ machine="$OPTARG"
;;
"p")
- pfad="$OPTARG"
+ path="$OPTARG"
;;
"h")
useage
esac
done
- if [ -z "$datum" ] || [ -z "$rechner" ] || [ -z "$pfad" ] \
- || [ -z "$number" ]; then
- printf "Es fehlen Parameter!\n"
- exit 1
- fi
-}
-
-## @fn printStripLine()
-## @brief Gibt einen Trennungsstreifen auf der Konsole aus
-printfStripLine()
-{
- printf "####################"
- printf "####################"
- printf "####################"
- printf "####################\n"
-}
+ [ -n "$date" ] || errlog "missing date (-d)" || return $?
+ [ -n "$number" ] || errlog "missing number (-n)" || return $?
+ [ -n "$machine" ] || errlog "missing machine (-r)" || return $?
+ [ -n "$path" ] || errlog "missing path (-p)" || return $?
-## @fn RestoreData()
-## @brief Wiederherstellung der Daten
-RestoreData()
-{
- remoteuser=$(echo $rechner | sed 's/\(.*\)@.*/\1/')
- remoterechner=$(echo $rechner | sed 's/.*@\(.*\):.*/\1/')
- remoteport=$(echo $rechner | sed 's/.*@.*:\(.*\)/\1/')
- remoteLogin=$remoteuser@$remoterechner
- backDir="$datum"_"$number"_"$backname"
- fullPathBackPath="$backpath/$backDir"
- local restoreLog="$backpath/restore-$(date +%Y-%m-%d).log"
-
- savelog -nJ9 $backpath/restore-*.log
-
- printfStripLine
- printf "Daten werden wiederhergestellt\n\n" \
- | tee $restoreLog
- printf "vom Datum: %s\n" "$datum" \
- | tee -a $restoreLog
- printf "Nummer: %s\n" "$number" \
- | tee -a $restoreLog
- printf "Rechner: %s\n" "$rechner" \
- | tee -a $restoreLog
- printf "Pfad: %s\n\n" "$pfad" \
- | tee -a $restoreLog
- printf "rsync --archive --verbose --sparse --acls --hard-links \
---human-readable --rsh \"ssh -p %s\" --log-file %s/%s %s/%s/%s %s:%s\n\n" \
- "$remoteport" "$backpath" "$restoreLog" "$fullPathBackPath" \
- "$remoterechner" "$pfad" "$remoteLogin" "$pfad" | tee -a $restoreLog
- printfStripLine
-
-
- rsync --archive --verbose --sparse --acls --hard-links \
- --human-readable \
- --rsh "ssh -p $remoteport" \
- --log-file $restoreLog $fullPathBackPath/$remoterechner/$pfad \
- $remoteLogin:$pfad
-}
+ restore "$date" "$number" "$machine" "$path" \
+ || return $?
-## @fn main()
-## @brief Ablauf des Skripts
-main()
-{
- head -2 license
- echo
- SetDefaultVariables
- ReadArguments $*
- RestoreData
+ echo "â
SUCCESS: restore"
}
main $*