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 inotifyfamille d'appels système, les utilitaires de l'espace utilisateur exploitant ces appels sont fournis par le inotify-toolspackage 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-toolsfournit inotifywaitet les inotifywatchbinaires, nous avons besoin du premier.
Vous souhaitez donc exécuter la commande asciidoctor -q some_filelorsqu'un .adocfichier est modifié ( some_filesera remplacé par celui-ci), si vous supposez que vos .adocfichiers se trouvent dans le répertoire /foo/bar, vous pouvez définir la surveillance:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qactive le mode silencieux, aucune information d' inotifywaitelle-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, closeetc.
--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/*.adocsera étendu à tous les .adocfichiers du /foo/barré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 greppour filtrer uniquement les fichiers souhaités. Ici, configurer la montre de manière récursive ( -r) sur le répertoire /foo/baret utiliser greppour filtrer uniquement les .adocfichiers:
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 %wrésout en nom de répertoire, nous devons %fdonc obtenir le nom du fichier. Tout en regardant des fichiers, %fse résoudrait à une chaîne vide.
Notez que vous pouvez également exécuter inotifywaiten -dmode 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 asciidoctorpar n'importe quelle autre commande de votre choix, si vous le souhaitez.
Cochez man inotifywaitpour avoir plus d'idée.