Linux bietet eine schöne Schnittstelle zum Überwachen aller Dateisystemereignisse wie Erstellen, Ändern und Entfernen von Dateien. Die Schnittstelle ist eine inotify
Familie von Systemaufrufen. Die Userspace-Dienstprogramme, die diese Aufrufe nutzen, werden vom inotify-tools
Paket in Ubuntu bereitgestellt (verfügbar im Universum-Repository). Wenn Sie es noch nicht haben, installieren Sie es durch:
sudo apt-get install inotify-tools
inotify-tools
bietet inotifywait
und inotifywatch
binaries, wir brauchen die erste.
Sie möchten den Befehl also ausführen, asciidoctor -q some_file
wenn eine .adoc
Datei geändert wird ( some_file
wird durch diese ersetzt). Wenn sich Ihre .adoc
Dateien im Verzeichnis befinden /foo/bar
, können Sie die Überwachung einstellen:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-q
aktiviert den leisen Modus, keine Infos von inotifywait
sich
-m
Aktiviert den Überwachungsmodus, andernfalls wird er nach dem ersten Ereignis beendet
--event modify
Wir sind nur an modify
Ereignissen interessiert , dh wenn eine Datei geändert wird. Andere mögliche Werte sind open
, close
usw.
--format %w
Wir möchten nur den Dateinamen, der geändert wird, und nicht eine Reihe anderer Informationen, da wir den Dateinamen als Eingabe für einen anderen Befehl verwenden
/foo/bar/*.adoc
wird auf alle .adoc
Dateien im /foo/bar
Verzeichnis erweitert
Das Obige zeigt Ihnen nun den Dateinamen, wenn einer geändert wird, um den Befehl für den Dateinamen auszuführen (vorausgesetzt, der Befehl akzeptiert Argumente über STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
Sie können auch eine rekursive Überwachung für das Verzeichnis einrichten. Anschließend müssen Sie grep
nur die gewünschten Dateien filtern. Hier setzen Sie die Uhr rekursiv ( -r
) im Verzeichnis /foo/bar
und grep
filtern nur .adoc
Dateien:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Beim Betrachten von Verzeichnissen wird der Ausgabeformatbezeichner %w
in den Verzeichnisnamen aufgelöst, daher müssen wir %f
den Dateinamen abrufen. Beim Betrachten von Dateien %f
würde sich die Zeichenfolge leeren.
Beachten Sie, dass Sie auch inotifywait
im daemon ( -d
) -Modus ausführen können, das Ganze skripten und / oder im Hintergrund ausführen und / oder mit anderen Optionen spielen können.
Sie können auch durch asciidoctor
einen anderen Befehl Ihrer Wahl ersetzen , wenn Sie möchten.
Überprüfen Sie man inotifywait
, um mehr Idee zu bekommen.