Auslöser ist folgender Artikel (wobei an unserer Schule auch sonst schon einfach Daten verschwunden sind, bei 1700 Benutzern kommt das schon mal vor):
Erst mal müssen Sie herausfinden, wo genau die Daten gespeichert sind, an denen Sie Interesse haben. Das ist unter Windows nicht einfach, da Daten an verschiedenen Orten gespeichert werden.
Auf dem Datenträger Ihrer Wahl, legen Sie eine Datei .bash Datei an, z.B. stickbackup.bash
für ein Backup auf einen Stick. Passen Sie dazu folgendes Script an:
# Achtung: Das Skript muss von der Kommandozeile im Verzeichnis # gestartet werden, wohin das Backup gemacht werden soll. makeBackup() { local source="$1" echo "Backup $source" cp -vru "$source" . echo "Fertig mit $source" } makeBackup "/c/Users/Ivo.Bloechliger/OneDrive - Kt. SG BLD/Informatik" # Hier weitere Verzeichnisse sichern...
bash stickbackup.bash
starten.
pwd
wird der aktuelle Pfad angezeigt werden (oder kopieren aus der FileExplorer Kopfzeile sollte auch gehen).Der cp-Befehl kopiert Dateien (lokal). Folgende Varianten sind möglich:
cp DATEI ZIELNAME # Macht eine Kopie von DATEI mit Namen ZIELNAME cp DATEI ZIELNORDNER # Kopiert die DATEI in den ZIELORNDER cp DATEI1 DATEI2 ... ZIELORDNER # Kopiert die Dateien DATEI1, DATEI2, etc. in den ZIELORDNER
~
am Schluss).Die komplette Liste der Optionen ist auf der man-page zu finden.
Für das Backup auf einen Server empfiehlt sich das Tool rsync
, das ähnlich wie cp
funktioniert, aber eben auch übers Netz. Plus rsync
wurde auf Geschwindigkeit optimiert, dass wirklich nur geänderte Dateien übertragen werden.
Windows kann so konfiguriert werden, dass .bash-Dateien direkt mit git-bash gestartet werden können. Dazu muss aber erst der Pfad der git-bash ermittelt werden. Ein Möglichkeit dazu führt über das Start-Menu, Rechts-klick auf den git-bash Icon, «Open containing folder», dort auf Eigenschaften von git-bash (ist nur eine Verknüpfung), und dort kann der effektive Pfad der git-bash.exe Datei kopiert werden.
Dann Rechts-Klick auf eine .bash -Datei, Ausführen mit, Programm auswählen und dort mit den Pfad der git-bash eingeben.
Wenn das funktoniert hat, Rechts-Klick auf eine .bash-Datei und dort einstellen, dass .bash-Dateien mit git-bash geöffnet werden.
Das nächste Problem ist, dass das aktuelle Verzeichnis bei der Ausführung nicht jenes ist, in dem die .bash Datei liegt. Mit folgenden Ergänzungen klappt es aber:
# Pfad von dieser Datei ist in $0 # Konvertieren nach Unix-Pfad (d.h. /d anstatt D:\) unixname=`cygpath "$0"` # Nur das Verzeichnis dieser Datei target=`dirname $unixname` makeBackup() { local source="$1" echo "Backup $source" echo " -> Ziel $target" cp -vru "$source" "$target" echo "Fertig mit $source" } makeBackup "/c/Users/Ivo.Bloechliger/OneDrive - Kt. SG BLD/Informatik" # Hier weitere Verzeichnisse sichern... # Warten auf Enter, damit noch angezeigt wird, ausser bei Start auf der Kommandozeile if [ "$target" != "." ] then echo "Bitte [Enter] drücken..." read fi
Ziel ist es, ein Pythonprogramm zu schreiben, das ständig überprüft, ob der Backup-Stick eingesteckt ist und wenn ja, das Backup ausführt. Dieses Programm soll jeweils automatisch beim Anmelden gestartet werden.
Das python-Programm sieht wie folgt aus (die beiden Pfade müssen wohl noch angepasst werden, siehe die Screencasts unten)
import os import subprocess import time gitbash = r"C:\Program Files\Git\git-bash.exe" # Eventuell anpassen! backupscript = r"D:\stickbackup2.bash" # Eventuell anpassen! while True: # Check if stick is present if os.path.exists(backupscript): print("Stick present") # Backup starten print("Starte backup...") cmd = [gitbash, backupscript] subprocess.call(cmd) time.sleep(30*60) # Halbe Stunde else: print("nix da!") time.sleep(10)