Ich habe einen Ordner mit einer Reihe von Unterordnern, diese Ordner wurden asciidoctor
mit der .adoc
Erweiterung abgelegt .
Jedes Mal, wenn ich Änderungen an Dateien vorgenommen habe (was häufig der Fall ist), muss ich ausgeführt werden
asciidoctor -q filename.adoc
um es in das HTML-Format zu kompilieren.
Ich versuche den Prozess zu automatisieren. Bisher bin ich mit entr gekommen :
ls *.adoc | entr asciidoctor -q *.adoc
funktioniert aber nur mit vorhandenen Ordnern, nicht für Unterordner. Ich habe diese Variante ausprobiert, aber sie funktioniert nicht:
find . -name '*.adoc' | entr asciidoctor -q *.adoc
Irgendwelche Ideen, wie ich diesen automatisierten Prozess für alle Unterordner implementieren könnte?
command-line
bash
filesystem
Kleie
quelle
quelle
Antworten:
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 vominotify-tools
Paket in Ubuntu bereitgestellt (verfügbar im Universum-Repository). Wenn Sie es noch nicht haben, installieren Sie es durch:inotify-tools
bietetinotifywait
undinotifywatch
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:-q
aktiviert den leisen Modus, keine Infos voninotifywait
sich-m
Aktiviert den Überwachungsmodus, andernfalls wird er nach dem ersten Ereignis beendet--event modify
Wir sind nur anmodify
Ereignissen interessiert , dh wenn eine Datei geändert wird. Andere mögliche Werte sindopen
,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 erweitertDas 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):
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
undgrep
filtern nur.adoc
Dateien: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.quelle
Die Verwendung
inotifywait
ist der typische Ansatz, es gibt jedoch auch ein separates Dienstprogramm namensinotify-hookable
, mit dem Sie nur einen Befehl ausführen können, wenn sich eine Datei (oder ein Verzeichnis) ändert:Es scheint zu beenden, nachdem der Befehl einmal ausgelöst wurde. Ich sehe keine Option für kontinuierliches Beobachten, also könnten Sie etwas tun wie:
Beachten Sie, dass es Optionen gibt, um mehrere Dateien oder ein Verzeichnis rekursiv zu überwachen, und Optionen, um Dateien / Pfade zu ignorieren.
quelle
sudo apt-get install inotify-hookable
Es gibt viele Tools, insbesondere wenn Sie Ihr Repository durchsuchen
Das gibt uns viele Werkzeuge. Aber du musst sie nicht testen, weil ich das getan habe.
Ich habe diese und viele andere Tools getestet:
Unter diesen Tools fand ich drei nützlich und zuverlässig:
Und zwischen diesen drei ist das Direvent ohne Zweifel das beste.
Die Verwendung ist so nützlich und zuverlässig, dass ich sie für eine einfache Pipeline mit meinen Microservices verwendet habe.
direvent.conf
Datei zum AnschauenDies ist nur eine der Konfigurationsdateien, in denen dieser Befehl ausgeführt wird, wenn sich das Schreiben ändert. Dies kann auch ein Bash- Skript sein.
Keine Notwendigkeit,
while
Schleife oder andere Sachen zu verwenden.Eigenschaften
Entwickelt von Sergey Poznyakoff .
Installieren
Die Installation mit dem Quellcode ist jedoch recht einfach und unkompliziert, sodass Sie die letzte Version erhalten (derzeit: 5.1).
quelle
Nun, ich empfehle Folgendes.
quelle