Linux fornisce una bella interfaccia per monitorare tutti gli eventi del file system come la creazione, la modifica, la rimozione di file. L'interfaccia è una inotify
famiglia di chiamate di sistema, le utility di userspace che sfruttano queste chiamate sono fornite dal inotify-tools
pacchetto in Ubuntu (disponibile sul repository dell'universo). Se non lo hai già, installa:
sudo apt-get install inotify-tools
inotify-tools
fornisce inotifywait
e inotifywatch
binari, abbiamo bisogno del primo.
Quindi vuoi eseguire il comando asciidoctor -q some_file
quando qualsiasi .adoc
file viene modificato ( some_file
verrà sostituito da quello), se così assumendo che i tuoi .adoc
file siano nella directory /foo/bar
, puoi impostare l'orologio:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-q
abilita la modalità silenziosa, nessuna informazione da inotifywait
sola
-m
abilita la modalità monitor, altrimenti uscirà dopo il primo evento
--event modify
, siamo interessati solo modify
all'evento, ad esempio quando un file viene modificato. Altri possibili valori includono open
, close
ecc.
--format %w
, vogliamo solo il nome del file che viene modificato anziché un mucchio di altre informazioni poiché useremo il nome del file come input per un altro comando
/foo/bar/*.adoc
verrà espanso in tutti i .adoc
file nella /foo/bar
directory
Ora quanto sopra ti mostrerà il nome del file ogni qualvolta viene modificato, ora per eseguire il comando sul nome del file (supponendo che il comando accetta argomenti tramite STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
È inoltre possibile impostare un orologio ricorsivo sulla directory, quindi sarà necessario utilizzare grep
per filtrare solo i file desiderati. Qui impostando watch ricorsivamente ( -r
) sulla directory /foo/bar
e usando grep
per filtrare solo i .adoc
file:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Quando si guardano le directory, l'identificatore del formato di output si %w
risolve nel nome della directory, quindi è necessario %f
ottenere il nome del file. Durante la visione di file, %f
risolverebbe svuotare la stringa.
Nota che puoi anche eseguire inotifywait
in -d
modalità demone ( ), puoi anche scrivere tutto, e / o eseguire in background e / o giocare con altre opzioni.
Inoltre, se lo desideri, puoi sostituirlo asciidoctor
con qualsiasi altro comando di tua scelta.
Controlla man inotifywait
per avere più idee.