Backup 2 §

Geliefert wie versprochen!

Eine Erweiterung des ersten Backup-Skriptes mit einer Besonderheit: Es liefert was es verspricht (im Rahmen der Zielsetzung!)

Das vorhergehende Skript "Backup 1" hat die Aufgabe, ein Quellverzeichnis an die Stelle zu sichern, an der es sich selbst befindet, leider aber auch den Nachteil, dass es den Namen der Quelle fest kodiert in sich trägt. Das heisst, eine Änderung der Datenquelle ist nur durch die Änderung des Skriptes möglich. Aber das ist nur die halbe Wahrheit. Es kann noch schlimmer kommen.

Was, wenn jemand auf die Idee kommt, ein angepasstes Skript umzubennen? Beispielweise in der Form:

Filme_sichern_von_MeinePlatte.sh

Und im Skript steht:

SRC="/Volumes/DeinePlatte/Filme"

In einem solchen Fall lügt das Skript! Es sichert nämlich nicht die Filme von MeinePlatte sondern die von DeinePlatte, was für den Anwender im Sicherungsfall nicht erkennbar ist. Und ehe er merkt was los ist (wenn er es überhaupt merkt) ist alles schon zu spät. Wenn er Glück hat, ist DeinePlatte nicht angeschlossen, dann bricht das Skript ab, aber soviel Glück hat man nur selten.

In einer Grafischen Nutzerumgebung wie auf dem Mac oder Ubuntu oder dergleichen, kann man mit einer Maus ein Skript starten indem man doppelt auf den Namen des Skriptes klickt. Dummer Weise kann man nicht ohne weiteres einen Parameter eingeben. Man möchte zum Sichern auch nicht jedes Mal angeben was gesichert werden soll und eigentlich möchte man sicher ein, dass ein Skript tut was es verspricht.

Es wäre also sinnvoll, dass ein Skript namens

Filme_sichern_von_MeinePlatte.sh

auch das Verzeichnis 'Filme' vom Medium 'MeinePlatte' sichert. Das folgende Skript tut genau das:

#! /usr/bin/env bash

VOL=${0##*_}
DIR=${0%%_*}
SRC="/Volumes/${VOL%.*}/${DIR##*/}"

if [ -d "${SRC}" ]
  then
  rsync -ah -x --delete --stats --progress --exclude='.DS_Store' "${SRC}" "${0%/*}"
  else
  echo "ABBRUCH: Verzeichnis '${SRC}' ist nicht vorhanden"
  echo "         Ggf. ist der Datenträger nicht verbunden"
# read -sn1
  fi

Dieses Skript verwendet den eigenen Dateinamen um die Datenquelle zu bestimmen. Die Namensregel ist, wenn man sich daran gewöhnt hat, einfach:

VERZEICHNIS_alfanumerisch_LAUFWERK.endung

Wobei der Teil "alfanumerisch" entfallen kann, Hauptsache ist, wenigstens ein Unterstrich bleibt erhalten. Nach dem Laufwerksnamen wird ein Punkt erwartet, der von einer Endung gefolgt werden kann. Beipiele:

Filme_von_platte_Mein Laufwerk.sh

Catalog_from_USBDrive.sh

usw.

Man kann dieses Skript also einfach kopieren und umbenennen und schon tut es etwas anderes. Es kommt nur noch darauf an einen passenden Namen zu verwenden.

Einen Haken hat das Skript aber noch: In den Verzeichnis- und Mediennamen dürfen weder Punkte noch Unterstriche verwendet werden. Wenn sie das dennoch wollen, müssen Sie das Skript entsprechend anpassen und ein eigenes Namensschema entwickeln.

Unter MacOSX schliessen sich die Terminalfenster automatisch. In dem Fall kann man den Gartenzaun vor der vorletzten Zeile löschen. Dann bleibt das Skript im Fehlerfall stehen bis für das Terminalfenster eine Taste gedrückt wird.

ACHTUNG: Bedenken Sie bitte, dass Sie mit diesem Skript Sicherungen anfertigen und keine Datensammlungen. Das Ziel sieht nach erfolgreichem Skriptlauf aus wie die Quelle. Bei erneutem Aufruf des Skriptes werden alle Änderungen von der Quelle auf das Ziel übertragen. Sofern an der Quelle gegeben, werden auch Dateien im Zielverzeichnis gelöscht!

- 26.07.2010 bis 06.08.2010 -

Freigesetzt