J'ai un dossier avec un tas de sous-dossiers, ces dossiers ont été asciidoctor
classés avec .adoc
extension.
Chaque fois que je modifie des fichiers (ce qui est souvent le cas), je dois exécuter
asciidoctor -q filename.adoc
pour le compiler au format HTML.
J'essaie d'automatiser le processus. jusqu'à présent, je suis venu avec ceci en utilisant entr :
ls *.adoc | entr asciidoctor -q *.adoc
mais ne fonctionne qu'avec le dossier existant et non pour les sous-dossiers. J'ai essayé cette variante, mais cela ne fonctionne pas:
find . -name '*.adoc' | entr asciidoctor -q *.adoc
Des idées sur la façon dont je pourrais implémenter ce processus d'automatisation pour tous les sous-dossiers?
command-line
bash
filesystem
fibre
la source
la source
Réponses:
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 leinotify-tools
package dans Ubuntu (disponible sur le référentiel de l'univers). Si vous ne l'avez pas déjà, installez-le par:inotify-tools
fournitinotifywait
et lesinotifywatch
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:-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'auxmodify
événements c'est-à-dire lorsqu'un fichier est modifié. D'autres valeurs possibles incluentopen
,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épertoireMaintenant, 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):
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 utilisergrep
pour filtrer uniquement les.adoc
fichiers: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.la source
L'utilisation
inotifywait
est l'approche typique, mais il existe également un utilitaire distinct appeléinotify-hookable
qui vous permet simplement d'exécuter une commande lorsqu'un fichier (ou répertoire) change:Il semble se fermer après avoir déclenché la commande une fois; Je ne vois pas d'option pour une surveillance continue, vous pouvez donc faire quelque chose comme:
Notez qu'il existe des options pour surveiller plusieurs fichiers ou un répertoire, récursivement, et des options pour ignorer les fichiers / chemins.
la source
sudo apt-get install inotify-hookable
Il existe de nombreux outils, surtout si vous recherchez dans votre référentiel
ce qui nous donne de nombreux outils. Mais vous n'avez pas à les tester parce que je l'ai fait.
J'ai testé ces outils et bien d'autres:
Parmi ces outils, j'en ai trouvé trois utiles et fiables:
Et entre ces trois, le direvent est le meilleur sans aucun doute.
Il est si utile et fiable à utiliser que je l'ai utilisé pour un simple pipeline avec mes microservices.
direvent.conf
fichier pour regarderCe n'est qu'un des fichiers de configuration que j'ai dans lequel chaque fois qu'il y a un changement pour l' écriture, cette commande est exécutée - ce qui pourrait également être un script bash .
Pas besoin d'utiliser de
while
boucle ou autre.traits
Développé par Sergey Poznyakoff .
L'installation
Mais l'installer en utilisant son code source est assez facile et simple, ce qui vous donne la dernière version (actuellement: 5.1).
la source
Eh bien, je recommande ce qui suit.
la source