Cum se execută comanda când fișierele se modifică în Linux?

Ați ajuns la locul potrivit dacă doriți să învățați cum să rulați comenzi Linux atunci când orice fișier dintr-un director de lucru se schimbă și când sunt create fișiere noi.

În Linux, puteți folosi cron pentru a programa comenzile să ruleze la anumite momente.

Dar ce se întâmplă dacă aveți nevoie ca comenzile să fie executate de fiecare dată când un fișier este modificat sau un fișier nou este adăugat la un director?

Acest lucru este, de asemenea, ușor de realizat și există câteva instrumente de linie de comandă pentru a realiza asta.

Să începem!

watchexec

watchexec este un instrument la îndemână și independent care monitorizează un anumit director de lucru și execută o comandă dacă detectează orice modificări, cum ar fi actualizarea fișierelor sau crearea de noi fișiere.

Caracteristici

  • Nu necesită o linie de comandă complexă care implică xargs (argumente extinse).
  • Verifică în timp real modificările în directorul curent și în toate subdirectoarele.
  • Nu este nevoie de o limbă de rulare și nu este conectat la nicio limbă sau ecosistem specific.
  • .gitignore și .ignore sunt utilizate în mod implicit pentru a decide pentru ce fișiere să ignore notificările.
  • Grupurile de procese sunt folosite pentru a ține evidența programelor de bifurcare.
  • Vizionarea fișierelor cu o anumită extensie este acceptată.
  • Este compatibil cu OS X, Linux și Windows.
  • Filtrarea și ignorarea evenimentelor bazate pe glob (modele de căutare de fișiere pentru a găsi nume de fișiere parțial identice sunt posibile.
  Cum să vă sincronizați fișierele folosind lsyncd pe Linux

Instalarea watchexec

Pentru a instala cu ușurință instrumentul watchexec, inserați următorul link în terminal sau într-un prompt shell și apăsați Enter.

Linux și macOS

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

După instalarea cu succes, calea va fi afișată pe ecran. În cazul meu, acest instrument a fost instalat în /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

Și după instalare, navigați la depozitul .local/bin și verificați dacă fișierul este acolo sau nu folosind aceste comenzi.

cd .local/bin

ls

Următorul pas este să exportați calea pentru a utiliza instrumentul watchexec.

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

Pentru a rula, trebuie doar să tastați watchexec în terminal ca utilizator root. Utilizați această comandă pentru a vedea ce steaguri și opțiuni pot fi utilizate cu instrumentul watchexec.

watchexec --help

Exemple de comenzi

  • Apelați ls -la când orice fișier se modifică în acest director/subdirector. Această comandă arată toate fișierele prezente în director ori de câte ori detectează vreo modificare.
watchexec -- ls -la
  • Ori de câte ori oricare dintre fișierele de extensie python, js, CSS sau HTML din directorul curent se modifică, executați comanda. Aici puteți transmite orice comandă doriți. Extensiile de fișiere trebuie separate prin virgulă.
 watchexec --exts py,js,css,html <command>
  • Rulați comanda când se modifică orice fișier din lib sau src. Opțiunea „-w” urmărește un anumit fișier sau director din sistem.
watchexec -w lib -w src <command>
  • Apelați/reporniți orice serviciu atunci când orice fișier din directorul curent (și toate subdirectoarele) se modifică.
watchexec -e html -r tor

watchexec -e js,py -r mysql

Aici, opțiunea „-r” repornește procesul sau serviciul dacă rulează în sistem.

  Cum se integrează Thunderbird cu Tor pe Linux

Pentru mai multe exemple de utilizare watchexec, puteți vizita depozitul oficial GitHub.

intra

intra este un utilitar de linie de comandă simplu și excelent pentru rularea comenzilor arbitrare atunci când apar modificări într-un anumit director.

„entr” înseamnă Event Notify Test Runner. Acest instrument a fost creat cu scopul de a face feedback rapid și testare automată.

Instalare

entr este preinstalat în distribuția Linux. În cazul în care lipsește, trebuie să îl instalați manual.

Acest instrument este simplu de utilizat și poate fi instalat cu următoarea comandă.

sudo apt-get install entr

Sau îl puteți instala și clonând oficialul Depozitul Git.

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

Apoi, navigați la acel director și instalați cerințele utilizând comenzile de mai jos.

./configure
make test
make install

Pentru a vedea opțiunile de construcție disponibile, rulați ./configure -h

Exemple de comenzi

Pentru a vedea opțiunile și argumentele disponibile pentru comanda enter. Utilizați următoarea comandă.

man entr

Această comandă afișează manualul de utilizare pentru comanda enter.

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)
  • Pentru a lansa și reîncărca automat un server MySQL atunci când orice fișier JavaScript se modifică în directorul de lucru. De fiecare dată când modificările sunt salvate în fișier, entr reîncarcă serverul MySQL.
 ls *.js | entr -r mysql
  • Pentru a reîncărca automat un server web sau pentru a închide dacă serverul se închide.
$ ls * | entr -rz ./httpd

Pentru mai multe detalii și exemple despre comanda entr, puteți vizita oficialul lor Depozitul GitHub.

  Cum să personalizați terminalul Linux

Cuvinte finale 👩‍💻

Sper că ați găsit acest articol foarte util pentru a învăța cum să rulați comenzi Linux atunci când orice fișier dintr-un anumit director se modifică și când sunt create fișiere noi.

De asemenea, ați putea fi interesat să aflați cum să eliminați fișiere și directoare în Linux.