
Inspiriert vondiese Superuser-AntwortIch habe das folgende copy_library.sh
Skript geschrieben und im selben Ordner wie eine Datei mit dem Namen gespeichert library.bib
:
#!/bin/sh
while inotifywait -e close_write library.bib; do
cp -f ./library.bib ../other_place/ ;
echo "Library copied"
done
Wenn ich dieses Skript manuell starte, ./copy_library.sh
wird der Prozess nach dem ersten Kopieren beendet (was erfolgreich funktioniert):
londonrob ~/mydir
> ./copy_library.sh
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>
und es werden keine weiteren Änderungen verfolgt. Ich bin sicher, dass ich mit diesem Skript etwas tun soll, damit es kontinuierlich „im Hintergrund“ läuft, ohne dass ich es manuell starten muss.
Aber was?
Antwort1
Aus der inotifywait
Manpage:
inotifywait wartet effizient auf Änderungen an Dateien unter Verwendung der inotify(7)-Schnittstelle von Linux. Es eignet sich zum Warten auf Änderungen an Dateien durch Shell-Skripte. Es kann entweder beendet werden, sobald ein Ereignis eintritt, oder kontinuierlich ausgeführt werden und Ereignisse ausgeben, sobald sie auftreten.
Und
-m, --monitor Anstatt nach dem Empfang eines einzelnen Ereignisses zu beenden, wird das Programm auf unbestimmte Zeit ausgeführt. Das Standardverhalten besteht darin, nach dem Auftreten des ersten Ereignisses zu beenden.
EDIT: Ich habe ein Log, welches alle 15 Sekunden angehängt wird. Das folgende Skript führt die while-Schleife für jede von inotifyread ausgegebene Zeile aus:
#!/bin/sh
inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
echo "$line"
echo "Copy coperation here..."
done
In deinem Fall musst du natürlich das Event (modify) in close_write ändern.