Welches Backup ist das aktuelle?

Jakob Mendel <[email protected]>
Newsgroups gmane.user-groups.linux.dresden
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.