Come eseguire il comando quando i file cambiano in Linux?

Sei nel posto giusto se vuoi imparare come eseguire i comandi Linux quando un file in una directory di lavoro cambia e quando vengono creati nuovi file.

In Linux, puoi usare cron per programmare i comandi da eseguire in determinati orari.

Ma cosa succede se hai bisogno che i comandi vengano eseguiti ogni volta che un file viene modificato o un nuovo file viene aggiunto a una directory?

Anche questo è facilmente realizzabile e ci sono alcuni strumenti da riga di comando per eseguirlo.

Iniziamo!

watchexec

watchexec è uno strumento pratico e autonomo che monitora una determinata directory di lavoro ed esegue un comando se rileva modifiche come l’aggiornamento di file o la creazione di nuovi file.

Caratteristiche

  • Non richiede una riga di comando complessa che coinvolga xargs (argomenti estesi).
  • Verifica la presenza di modifiche nella directory corrente e in tutte le sottodirectory in tempo reale.
  • Non è necessario un runtime di lingua e non è connesso a nessun linguaggio o ecosistema specifico.
  • .gitignore e .ignore vengono utilizzati per impostazione predefinita per decidere per quali file ignorare le notifiche.
  • I gruppi di processi vengono utilizzati per tenere traccia dei programmi di fork.
  • È supportata la visualizzazione di file con una determinata estensione.
  • È compatibile con OS X, Linux e Windows.
  • Filtrare e ignorare gli eventi in base a glob (sono possibili modelli di ricerca di file per trovare nomi di file parzialmente identici.

Installazione di watchexec

Per installare facilmente lo strumento watchexec, incolla il seguente collegamento nel terminale o in un prompt della shell e premi invio.

  Come giocare a Observer su Linux

Linux e macOS

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

Dopo la corretta installazione, il percorso verrà visualizzato sullo schermo. Nel mio caso, questo strumento è stato installato in /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

E dopo l’installazione, vai al repository .local/bin e controlla se il file è presente o meno usando questi comandi.

cd .local/bin

ls

Il passaggio successivo consiste nell’esportare il percorso per utilizzare lo strumento watchexec.

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

Per eseguire, digita semplicemente watchexec nel terminale come utente root. Usa questo comando per vedere quali flag e opzioni possono essere usati con lo strumento watchexec.

watchexec --help

Esempi di comandi di esempio

  • Chiama ls -la quando qualsiasi file cambia in questa directory/sottodirectory. Questo comando mostra tutti i file presenti nella directory ogni volta che rileva una modifica.
watchexec -- ls -la
  • Ogni volta che uno qualsiasi dei file di estensione python, js, CSS o Html nella directory corrente cambia, esegui il comando. Qui puoi passare qualsiasi comando tu voglia. Le estensioni dei file devono essere separate da una virgola.
 watchexec --exts py,js,css,html <command>
  • Esegui il comando quando cambia qualsiasi file in lib o src. L’opzione “-w” controlla un file o una directory specifica nel sistema.
watchexec -w lib -w src <command>
  • Chiama/riavvia qualsiasi servizio quando un file nella directory corrente (e tutte le sottodirectory) cambia.
watchexec -e html -r tor

watchexec -e js,py -r mysql

Qui, l’opzione “-r” riavvia il processo o il servizio se è in esecuzione nel sistema.

  Linux 5.0 "Shy Crocodile" arriva con la crittografia Adiantum di Google

Per altri esempi di utilizzo di watchexec, puoi visitare il repository ufficiale di GitHub.

entra

entra è un’utilità da riga di comando semplice ed eccellente per eseguire comandi arbitrari quando si verificano modifiche in una determinata directory.

“Entr” sta per Evento Notifica Test Runner. Questo strumento è stato creato con l’obiettivo di effettuare feedback rapidi e test automatizzati.

Installazione

entr è preinstallato nella distribuzione Linux. Nel caso mancasse, è necessario installarlo manualmente.

Questo strumento è semplice da usare e può essere installato con il seguente comando.

sudo apt-get install entr

Oppure puoi anche installarlo clonando l’ufficiale Repository Git.

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

Quindi, vai a quella directory e installa i requisiti usando i comandi seguenti.

./configure
make test
make install

Per vedere le opzioni di build disponibili, esegui ./configure -h

Esempi di comandi di esempio

Per vedere le opzioni e gli argomenti disponibili per il comando entr. Usa il seguente comando.

man entr

Questo comando visualizza il manuale utente per il comando 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)
  • Per avviare e ricaricare automaticamente un server MySQL quando qualsiasi file JavaScript cambia nella directory di lavoro. Ogni volta che le modifiche vengono salvate nel file, entr ricarica il server MySQL.
 ls *.js | entr -r mysql
  • Per ricaricare automaticamente un server Web o terminare se il server esce.
$ ls * | entr -rz ./httpd

Per maggiori dettagli ed esempi sul comando entr, puoi visitare il loro ufficiale Archivio GitHub.

  Come installare JetBrains DataGrip su Linux

Parole finali 👩‍💻

Spero che tu abbia trovato questo articolo molto utile per imparare come eseguire i comandi Linux quando un file in una determinata directory cambia e quando vengono creati nuovi file.

Potresti anche essere interessato a imparare come rimuovere file e directory in Linux.