Bash-Skript kopiert keine Dateien mit udev

Bash-Skript kopiert keine Dateien mit udev

Ich habe ein Skript eingerichtet, das ausgeführt wird, wenn ein bestimmtes USB-Laufwerk angeschlossen wird. Es soll einen Ordner vom USB-Laufwerk in einen Sicherungsordner kopieren und diesen Ordner überschreiben, wenn er bereits vorhanden ist. Wenn ich jedoch mein USB-Laufwerk anschließe, erstellt es den Ordner, kopiert jedoch keine Dateien.

Meine .rules sehen folgendermaßen aus:

ACTION=="add", ATTR{idVendor}==Vendor, ATTR{idProduct}==Product, RUN+="/bin/sh /path/to/file/mkBackup"

Meine Datei mkBackup sieht folgendermaßen aus:

#!/bin/bash
a="/path/to/file/Backup"
if [ -e $a ]; then
        rm -rf $a
fi
mkdir $a
cp -r /path/to/usb/folder $a

Wenn es von ausgeführt wird udev, wird der Backup-Ordner erstellt, aber er ist leer. Wenn ich jedoch einfach ausführe ./mkBackup, wird der Ordner erstellt und alles wird kopiert. Dies ist das erste Mal, dass ich udevso etwas verwende, also verzeihen Sie mir bitte, wenn dies eine einfache Frage zu sein scheint. Vielen Dank im Voraus.

Antwort1

Da der Backup-Ordner erstellt wird, wissen Sie, dass das Skript erfolgreich ausgeführt wird, wenn Sie das Gerät anschließen. Ich vermute, dass das Skript ausgeführt wirdVordas Gerät ist tatsächlich fertig gemountet. Daher sind die Dateien noch nicht verfügbar für cp.

Was passiert, wenn Sie sleep 5nach hinzufügen mkdir $a? Oder was, wenn Sie stattdessen versuchen, vorhandene Dateien zu kopieren?

Dieser Linkist auch als Referenz sehr hilfreich.

Ich benutze außerdem:

udevadm monitor --udev

Um Udev-Ereignisse in Echtzeit zu beobachten.

udevadm test /path/to/dev

Um einen udev-Ereignislauf für das Gerät zu simulieren. Beachten Sie, dass diesnichtFühren Sie jedes durch die RUN-Taste angegebene Programm aus.

BEARBEITEN:Wie Gilles hilfreich anmerkt, wird meine Idee nicht funktionieren. Und ich kenne keine Lösung. Hier ist der Grund:

Udev macht das USB-Gerät für das Betriebssystem verfügbar. Anschließend erkennt das Betriebssystem, dass das Betriebssystem ein mountbares Dateisystem enthält und mountet es. Ab diesem Zeitpunkt sind die Dateien auf dem USB-Gerät tatsächlich verfügbar.

Jedes Skript, das durch eine udev-Regel ausgeführt wird, wird ausgeführtVordas Dateisystem ist tatsächlich gemountet. Wenn mir eine Alternative einfällt, aktualisiere ich den Beitrag.

verwandte Informationen