]> gitweb.hhaalo.de Git - simple-backup.git/commitdiff
refactor restore script
authorBastian Dehn <hhaalo@arcor.de>
Sat, 24 May 2025 07:35:26 +0000 (09:35 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 24 May 2025 07:43:02 +0000 (09:43 +0200)
restore

diff --git a/restore b/restore
index 1ff7f1260dea9bfa8d3ef751a733496586071176..bec455e8150893f83c5feea7c735a839c8aa7aa8 100755 (executable)
--- a/restore
+++ b/restore
@@ -1,11 +1,18 @@
 #!/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"
@@ -14,32 +21,89 @@ useage()
        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
@@ -48,71 +112,15 @@ ReadArguments()
                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 $*