#!/bin/sh # --------------------------------------------------------------------------- # Wiederherstellung aus einem Sicherungsarchiv. # # wiederherstellen.sh [--ohne-rueckfrage] # # Der vorhandene Datenbestand wird vorher zur Seite gelegt # (daten/verdraengt-/), nichts wird endgültig gelöscht. # Die Anwendung sollte dabei gestoppt sein. # --------------------------------------------------------------------------- set -eu ARCHIV="${1:-}" BESTAETIGT="${2:-}" if [ -z "$ARCHIV" ] || [ ! -f "$ARCHIV" ]; then echo "Aufruf: wiederherstellen.sh [--ohne-rueckfrage]" >&2 exit 1 fi DATEN="${LERNBAR_DATEN:-/daten}" DB="${LERNBAR_DB:-$DATEN/lernbar.sqlite}" if [ "$BESTAETIGT" != "--ohne-rueckfrage" ]; then printf 'Der aktuelle Datenbestand unter %s wird ersetzt. Fortfahren? [j/N] ' "$DATEN" read -r antwort case "$antwort" in j | J | ja | Ja) ;; *) echo "Abgebrochen." exit 1 ;; esac fi ARBEIT="$(mktemp -d)" trap 'rm -rf "$ARBEIT"' EXIT tar -xzf "$ARCHIV" -C "$ARBEIT" if [ ! -f "$ARBEIT/lernbar.sqlite" ]; then echo "Das Archiv enthält keine lernbar.sqlite – falsche Datei?" >&2 exit 1 fi STEMPEL="$(date +%Y%m%d-%H%M%S)" VERDRAENGT="$DATEN/verdraengt-$STEMPEL" mkdir -p "$VERDRAENGT" for datei in "$DB" "$DB-wal" "$DB-shm"; do [ -e "$datei" ] && mv "$datei" "$VERDRAENGT/" || true done if [ -d "$DATEN/anhaenge" ]; then mv "$DATEN/anhaenge" "$VERDRAENGT/anhaenge" fi mkdir -p "$DATEN" cp "$ARBEIT/lernbar.sqlite" "$DB" mkdir -p "$DATEN/anhaenge" if [ -d "$ARBEIT/anhaenge" ]; then cp -R "$ARBEIT/anhaenge/." "$DATEN/anhaenge/" 2>/dev/null || true fi echo "Wiederhergestellt aus $ARCHIV." echo "Der vorherige Stand liegt unter $VERDRAENGT und kann gelöscht werden, sobald alles passt."