Linux fournit une interface agréable pour surveiller tous les événements du système de fichiers comme la création, la modification et la suppression de fichiers. L'interface est une inotify
famille d'appels système, les utilitaires de l'espace utilisateur exploitant ces appels sont fournis par le inotify-tools
package dans Ubuntu (disponible sur le référentiel de l'univers). Si vous ne l'avez pas déjà, installez-le par:
sudo apt-get install inotify-tools
inotify-tools
fournit inotifywait
et les inotifywatch
binaires, nous avons besoin du premier.
Vous souhaitez donc exécuter la commande asciidoctor -q some_file
lorsqu'un .adoc
fichier est modifié ( some_file
sera remplacé par celui-ci), si vous supposez que vos .adoc
fichiers se trouvent dans le répertoire /foo/bar
, vous pouvez définir la surveillance:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-q
active le mode silencieux, aucune information d' inotifywait
elle-même
-m
active le mode moniteur, sinon il se fermera après le premier événement
--event modify
, nous ne nous intéressons qu'aux modify
événements c'est-à-dire lorsqu'un fichier est modifié. D'autres valeurs possibles incluent open
, close
etc.
--format %w
, nous voulons uniquement le nom de fichier qui est modifié plutôt que des tas d'autres informations car nous utiliserons le nom de fichier comme entrée dans une autre commande
/foo/bar/*.adoc
sera étendu à tous les .adoc
fichiers du /foo/bar
répertoire
Maintenant, ce qui précède vous montrera le nom du fichier à chaque modification, maintenant pour exécuter la commande sur le nom de fichier (en supposant que la commande prend des arguments via STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
Vous pouvez également configurer une surveillance récursive sur le répertoire, vous devrez ensuite utiliser grep
pour filtrer uniquement les fichiers souhaités. Ici, configurer la montre de manière récursive ( -r
) sur le répertoire /foo/bar
et utiliser grep
pour filtrer uniquement les .adoc
fichiers:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Lorsque vous regardez des répertoires, le spécificateur de format de sortie se %w
résout en nom de répertoire, nous devons %f
donc obtenir le nom du fichier. Tout en regardant des fichiers, %f
se résoudrait à une chaîne vide.
Notez que vous pouvez également exécuter inotifywait
en -d
mode daemon ( ), vous pouvez également scripter le tout, et / ou exécuter en arrière-plan, et / ou jouer avec d'autres options.
Vous pouvez également la remplacer asciidoctor
par n'importe quelle autre commande de votre choix, si vous le souhaitez.
Cochez man inotifywait
pour avoir plus d'idée.