ubuntuusers.de

wie checke ich mit if exist für eine von 2 files?

Status: Gelöst | Ubuntu-Version: Server 20.04 (Focal Fossa)
Antworten |

goorooj

Anmeldungsdatum:
26. Januar 2011

Beiträge: 81

Ich mache gerade ein einfaches offsite-backup.

ich habe 2 verschlüsselte festplatten die von hand gemounted werden. jetzt kann ich auch von hand das backup starten, aber ich möchte das etwas eleganter per cronjob haben.

ich will mit IF EXIST oder TEST checken ob eine der beiden platten vorhanden ist bevor das backup per cronjob startet, um ein vollaufen der rootpartition zu verhindern...

das heisst wenn entweder /dev/disk/by-uuid/disk1uuidstring oder /dev/disk/disk2uuidstring existieren geht das backup los, sonst nicht.

ich starte bereits den mountbefehl mit mount /dev/disk/by-uuid/disk1uuid /backup || mount /dev/disk/by-uuid/disk2uuid /backup und das geht ganz nett. jetzt will ich sowas ähnliches für den if exist oder test check

Moderiert von kB:

Aus dem Forum „Sicherheit“ in einen besser passenden Forenbereich verschoben. Bitte beachte die als wichtig markierten Themen („Welche Themen gehören hier her und welche nicht?“) im jeweiligen Forum! Danke.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9702

Wohnort: Münster

Es gibt viele Möglichkeiten. Ich würde es mit diesem Ansatz lösen:

#! /bin/bash -e

backup_to() { … }

! test $# = 0 || set -- UUID1 UUID2 UUID3 …

for Target
do      test -e /dev/disk/by-uuid/$Target && backup_to $Target || continue
        break
done || echo Kein Backup-Ziel gefunden! >&2

Die Funktion backup_to() für die Drecksarbeit musst Du natürlich ergänzen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13204

goorooj schrieb:

ich starte bereits den mountbefehl mit mount /dev/disk/by-uuid/disk1uuid /backup || mount /dev/disk/by-uuid/disk2uuid /backup und das geht ganz nett. jetzt will ich sowas ähnliches für den if exist oder test check

Warum nutzt Du nicht einfach den Exit-Code der mount-Befehle?

1
2
3
4
if mount /dev/disk/by-uuid/disk1uuid /backup || mount /dev/disk/by-uuid/disk2uuid /backup; then
  trap 'umount /backup' 0
  backup ....
fi

Man kann noch Stderr umleiten um die hässliche Fehlermeldung loszuwerden, aber andererseits schadet die auch nicht.

goorooj

(Themenstarter)

Anmeldungsdatum:
26. Januar 2011

Beiträge: 81

danke! funktioniert beides, ich habe jetzt die erste, längere version genommen weil das für mich übersichtlicher ist und ich da noch schöner zeug reinflicken kann wie datenbankdumps.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13204

kB schrieb:

Man sollte vielleicht erwähnen, dass das Skript UUIDs als Argumente erwartet, falls nicht die Standard-UUIDs genutzt werden sollen. Wenn etwas anderes übergeben wird, wird es nicht funktionieren. Ich hatte das Thema so verstanden, dass es exakt zwei bekannte UUIDs gibt, die zur Verwendung kommen sollen. Dann braucht man die Skript-Argumente natürlich nicht.

goorooj schrieb:

funktioniert beides, ich habe jetzt die erste, längere version genommen weil das für mich übersichtlicher ist und ich da noch schöner zeug reinflicken kann wie datenbankdumps.

Wieso kannst Du die in meine Lösung nicht einbauen? Du musst doch nur da, wo backup .... steht weitere Befehle einfügen.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9702

Wohnort: Münster

rklm schrieb:

kB schrieb:

Man sollte vielleicht erwähnen, dass das Skript UUIDs als Argumente erwartet, falls nicht die Standard-UUIDs genutzt werden sollen. Wenn etwas anderes übergeben wird, wird es nicht funktionieren.

Doch! Wenn etwas übergeben wird, was nicht als UUID eines verfügbaren Dateisystem interpretiert werden kann, wird das einfach ignoriert.

Ich hatte das Thema so verstanden, dass es exakt zwei bekannte UUIDs gibt, die zur Verwendung kommen sollen. Dann braucht man die Skript-Argumente natürlich nicht.

Ich hatte es auch so verstanden. Ich neige aber dazu, immer nach möglichst allgemeinen Lösungen zu suchen, wenn das fast nichts kostet. (IdF nur einen zusätzlichen Test-Befehl.)

Du kannst das offenbar auch, denn Deine beiden Vorschläge, das Ergebnis des mount-Befehls anstatt eines zusätzlichen Tests zu verwenden und der Einbau des trap-Befehls sind ja auch schon sehr sinnvolle Erweiterungen der Fragestellung. Ich würde sie sofort einbauen:

#! /bin/bash -e

do_backup() { … }

! test $# = 0 || set -- UUID1 UUID2 UUID3 …

for Target
do      mount /dev/disk/by-uuid/$Target /backup && trap 'umount /backup' ERR EXIT || continue
        do_backup ; break
done || echo Kein Backup-Ziel gefunden! >&2
Antworten |