Hallo allerseits,
beim Stammtisch am Mittwoch hatte ich gefragt, wie man bei zwei externen Backup-Festplatten idiotensicher feststellen kann, welches Backup das aktuelle ist.
Mit git und anschließendem Rückgriff auf die ctime von .git/index sollte dabei nicht gearbeitet werden, weil git für Bild- und pdf-Dateien weder gedacht noch gemacht ist.
Mit find ... -newer oder anderen Command Flags wollte ich nicht arbeiten, da ich einen mehrfachen, iterativen Aufruf von find befürchtete.
Also habe ich mir folgendes zusammengebastelt: #!/bin/bash HDA=$(sudo ls -aclR --time-style=long-iso /Pfad/zu/HDA | grep -v :$ | grep -v " .."$ | tr -s " " | cut -d" " -f6-7 | grep -v ^$ | sort -ur | head -1) HDB=$(sudo ls -aclR --time-style=long-iso /Pfad/zu/HDB | grep -v :$ | grep -v " .."$ | tr -s " " | cut -d" " -f6-7 | grep -v ^$ | sort -ur | head -1) if [[ $HDA < $HDB ]] ; then echo "HDB (Label=...) ist aktuell" # Backup entsprechend ausführen else echo "HDA (Label=...) ist aktuell" # Backup entsprechend ausführen fi exit
und möchte das kurz kommentieren: sudo ... Alle Verzeichnisse auf der Backup-Festplatte sollen ohne Fehlermeldung durchsucht werden. ls -a ... auch "versteckte" Verzeichnisse und Dateien berücksichtigen -c ... ctime ausgeben, was -l voraussetzt -l ... s. unter -c -R ... rekursiv vorgehen (alle Unterverzeichnisse berücksichtigen) --time-style=long-iso ... gibt eine ctime analog zu "2023-10-27 10:44" (ohne die "") aus grep -v :$ ... die "Überschriften" der Unterverzeichnisse werden nicht gebraucht grep -v " .."$ ... die ctime der jeweils übergeordneten Verzeichnisse werden nicht gebraucht, da sie bereits durch ls -R erfaßt wurden. Zugleich wird eine irreführende ctime herausgeworfen: Wenn HDA für das Backup als /Pfad/zu/HDA eingehängt wird, erhält /Pfad/zu als ctime Einhängedatum und -zeit von HDA. (Analog bei HDB.) Auf *das Einhängen* der Backup-Festplatte aber kommt es nicht an – es wäre sogar irreführend, wenn die aktuelle Backup-Platte als erste und die zu aktualisierende Platte als zweite (damit neuer) im selben Verzeichnis (bei externen Festplatten meist /media/<username>/) eingehängt wird. tr -s " " ... mehrfache Leerzeichen wie in drwx------ 3 root root 4096 2019-07-04 13:37 .dbus -rw-r--r-- 1 jm jm 26 2023-08-04 16:24 .dmrc zu einem zusammenziehen: drwx------ 3 root root 4096 2019-07-04 13:37 .dbus -rw-r--r-- 1 jm jm 26 2023-08-04 16:24 .dmrc Schließlich soll der folgende cut-Befehl ja funktionieren. cut -d" " -f6-7 ... Nachdem die Felder nur noch durch jeweils ein Leerzeichen voneinander getrennt sind, ctime (Datum und Uhrzeit) extrahieren grep -v ^$ ... Leerzeilen wegwerfen sort -u ... mehrfach auftretende Zeilen nur einmal ausgeben (könnte eigentlich entfallen, fällt mir gerade auf) -r ... die Zeile mit der "größten" (neuesten) ctime als erste ausgeben und ... head -1 ... nur diese Zeile mit der "größten" (neuesten) ctime ausgeben
[[ $HDA < $HDB ]] ist ein lexikalischer Vergleich: Die spätere ctime ist die größere, und die eigentlichen Backup-Befehle habe ich hier weggelassen.
Kommentare sind selbstverständlich erwünscht.
Viele Grüße und schon einmal ein schönes Wochenende Jakob