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!
Sommario:
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.
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.
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.
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.