Comment exécuter la commande lorsque le fichier change sous Linux ?

Vous êtes au bon endroit si vous voulez apprendre à exécuter des commandes Linux lorsqu’un fichier d’un répertoire de travail change et lorsque de nouveaux fichiers sont créés.

Sous Linux, vous pouvez utiliser cron pour planifier l’exécution de commandes à certains moments.

Mais que se passe-t-il si vous avez besoin que des commandes soient exécutées chaque fois qu’un fichier est modifié ou qu’un nouveau fichier est ajouté à un répertoire ?

C’est également facilement réalisable, et il existe des outils de ligne de commande pour le faire.

Commençons!

watchexec

watchexec est un outil pratique et autonome qui surveille un répertoire de travail donné et exécute une commande s’il détecte des modifications telles que la mise à jour d’un fichier ou la création d’un nouveau fichier.

Fonctionnalités

  • Il ne nécessite pas de ligne de commande complexe impliquant xargs (arguments étendus).
  • Vérifie les changements dans le répertoire courant et tous les sous-répertoires en temps réel.
  • Il n’y a pas besoin d’un environnement d’exécution de langage et il n’est connecté à aucun langage ou écosystème spécifique.
  • .gitignore et .ignore sont utilisés par défaut pour décider pour quels fichiers ignorer les notifications.
  • Les groupes de processus sont utilisés pour suivre les programmes de fork.
  • Regarder des fichiers avec une certaine extension est pris en charge.
  • Il est compatible avec OS X, Linux et Windows.
  • Il est possible de filtrer et d’ignorer les événements basés sur glob (des modèles de recherche de fichiers pour trouver des noms de fichiers partiellement identiques.
  Comment configurer gmusicbrowser sous Linux

Installation de watchexec

Pour installer facilement l’outil watchexec, collez le lien suivant dans le terminal ou dans une invite du shell, puis appuyez sur Entrée.

Linux et macOS

curl -sS https://webinstall.dev/watchexec | bash

Une fois l’installation réussie, le chemin s’affichera à l’écran. Dans mon cas, cet outil a été installé dans /root/.local/bin

┌──(root💀kali)-[~]
└─# curl -sS https://webinstall.dev/watchexec | bash

Thanks for using webi to install '[email protected]' on 'Linux/x86_64'.
Have a problem? Experience a bug? Please let us know:
        https://github.com/webinstall/webi-installers/issues

Lovin' it? Say thanks with a Star on GitHub:
        https://github.com/webinstall/webi-installers

Found /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Extracting /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Installing to /root/.local/opt/watchexec-vcli-v1.18.9/bin/watchexec
Installed 'watchexec vcli-v1.18.9' as /root/.local/bin/watchexec

Et après l’installation, accédez au référentiel .local/bin et vérifiez si le fichier est là ou non en utilisant ces commandes.

cd .local/bin

ls

L’étape suivante consiste à exporter le chemin pour utiliser l’outil watchexec.

export PATH="/root/.local/bin:$PATH"

Pour exécuter, tapez simplement watchexec dans le terminal en tant qu’utilisateur root. Utilisez cette commande pour voir quels drapeaux et options peuvent être utilisés avec l’outil watchexec.

watchexec --help

Exemples de commandes

  • Appelez ls -la lorsqu’un fichier change dans ce répertoire/sous-répertoire. Cette commande affiche tous les fichiers présents dans le répertoire chaque fois qu’elle détecte une modification.
watchexec -- ls -la
  • Chaque fois que l’un des fichiers d’extension python, js, CSS ou Html du répertoire actuel change, exécutez la commande. Ici, vous pouvez passer n’importe quelle commande que vous voulez. Les extensions de fichier doivent être séparées par une virgule.
 watchexec --exts py,js,css,html <command>
  • Exécutez la commande lorsqu’un fichier dans lib ou src change. L’option « -w » surveille un fichier ou un répertoire spécifique dans le système.
watchexec -w lib -w src <command>
  • Appelez/redémarrez n’importe quel service lorsqu’un fichier du répertoire courant (et de tous les sous-répertoires) change.
watchexec -e html -r tor

watchexec -e js,py -r mysql

Ici, l’option « -r » redémarre le processus ou le service s’il est en cours d’exécution dans le système.

  Comment installer le thème Skeuos GTK sur Linux

Pour plus d’exemples d’utilisation de watchexec, vous pouvez visiter le dépôt officiel GitHub.

entrée

entrée est un utilitaire de ligne de commande simple et excellent pour exécuter des commandes arbitraires lorsque des modifications se produisent dans un répertoire donné.

« entr » signifie Event Notify Test Runner. Cet outil a été créé dans le but de faire une rétroaction rapide et des tests automatisés.

Installation

entr est pré-installé dans la distribution Linux. S’il manque, vous devez l’installer manuellement.

Cet outil est simple à utiliser et peut être installé avec la commande suivante.

sudo apt-get install entr

Ou vous pouvez également l’installer en clonant le fichier officiel Référentiel Git.

git clone https://github.com/eradman/entr.git

Ensuite, accédez à ce répertoire et installez les exigences à l’aide des commandes ci-dessous.

./configure
make test
make install

Pour voir les options de construction disponibles, exécutez ./configure -h

Exemples de commandes

Pour voir les options et les arguments disponibles pour la commande entr. Utilisez la commande suivante.

man entr

Cette commande affiche le manuel d’utilisation de la commande entr.

NAME
     entr — run arbitrary commands when files change

SYNOPSIS
     entr [-acdnprsz] utility [argument /_ ...]

DESCRIPTION
     A list of files provided on standard input, and the utility is executed using the supplied arguments
     if any of them change.  entr waits for the child process to finish before responding to subsequent
     file system events.  A TTY is also opened before entering the watch loop in order to support interac‐
     tive utilities.

     The arguments are as follows:

     -a      Respond to all events which occur while the utility is running.  Without this option, entr
             consolidates events in order to avoid looping.  This option has no effect in conjunction with
             the -r flag.

     -c      Clear the screen before invoking the utility specified on the command line.  Specify twice to
             erase the scroll back buffer.

     -d      Track the directories of regular files provided as input and exit if a new file is added.
             This option also enables directories to be specified explicitly.  If specified twice, all new
             entries to a directory are recognized, otherwise files with names beginning with ‘.’ are ig‐
             nored.

     -n      Run in non-interactive mode.  In this mode entr does not attempt to read from the TTY or
             change its properties.

     -p      Postpone the first execution of the utility until a file is modified.

 Manual page entr(1) line 1 (press h for help or q to quit)
  • Pour lancer et recharger automatiquement un serveur MySQL lorsqu’un fichier JavaScript change dans le répertoire de travail. Chaque fois que les modifications sont enregistrées dans le fichier, entr recharge le serveur MySQL.
 ls *.js | entr -r mysql
  • Pour recharger automatiquement un serveur Web ou terminer si le serveur se ferme.
$ ls * | entr -rz ./httpd

Pour plus de détails et d’exemples sur la commande entr, vous pouvez visiter leur site officiel Référentiel GitHub.

  Comment jouer à Portal 2 sur Linux

Derniers mots 👩‍💻

J’espère que vous avez trouvé cet article très utile pour apprendre à exécuter des commandes Linux lorsqu’un fichier d’un répertoire donné change et lorsque de nouveaux fichiers sont créés.

Vous pouvez également être intéressé à apprendre comment supprimer des fichiers et des répertoires sous Linux.