Jak provést příkaz při změně souboru v systému Linux?

Jste na správném místě, pokud se chcete naučit spouštět příkazy Linuxu, když se změní jakýkoli soubor v pracovním adresáři a když jsou vytvořeny nové soubory.

V Linuxu můžete použít cron k naplánování spouštění příkazů v určitou dobu.

Co když ale potřebujete, aby se příkazy spouštěly pokaždé, když je soubor upraven nebo je do adresáře přidán nový soubor?

To je také snadno dosažitelné a existují některé nástroje příkazového řádku, které to umožňují.

Začněme!

watchexec

watchexec je praktický a samostatný nástroj, který monitoruje daný pracovní adresář a spustí příkaz, pokud zjistí nějaké změny, jako je aktualizace souboru nebo vytvoření nového souboru.

Funkce

  • Nevyžaduje složitý příkazový řádek obsahující xargs (rozšířené argumenty).
  • Kontroluje změny v aktuálním adresáři a všech podadresářích v reálném čase.
  • Není potřeba žádný jazykový modul a není připojen k žádnému konkrétnímu jazyku nebo ekosystému.
  • .gitignore a .ignore se ve výchozím nastavení používají k rozhodnutí, u kterých souborů se mají ignorovat oznámení.
  • Skupiny procesů se používají ke sledování programů rozvětvení.
  • Sledování souborů s určitou příponou je podporováno.
  • Je kompatibilní s OS X, Linux a Windows.
  • Filtrování a ignorování událostí na základě glob (vzorce vyhledávání souborů pro nalezení částečně identických názvů souborů jsou možné.

Instalace watchexec

Chcete-li snadno nainstalovat nástroj watchexec, vložte následující odkaz do terminálu nebo příkazového řádku a stiskněte klávesu enter.

Linux a macOS

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

Po úspěšné instalaci se cesta zobrazí na obrazovce. V mém případě byl tento nástroj nainstalován do /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

A po instalaci přejděte do úložiště .local/bin a pomocí těchto příkazů zkontrolujte, zda tam soubor je nebo ne.

cd .local/bin

ls

Dalším krokem je export cesty pro použití nástroje watchexec.

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

Pro spuštění stačí zadat watchexec do terminálu jako uživatel root. Pomocí tohoto příkazu zjistíte, které příznaky a možnosti lze použít s nástrojem watchexec.

watchexec --help

Ukázkové příklady příkazů

  • Volejte ls -la, když se v tomto adresáři/podadresáři změní jakýkoli soubor. Tento příkaz zobrazí všechny soubory přítomné v adresáři, kdykoli zjistí jakoukoli změnu.
watchexec -- ls -la
  • Kdykoli se změní některý ze souborů python, js, CSS nebo Html rozšíření v aktuálním adresáři, spusťte příkaz. Zde můžete předat libovolný příkaz. Přípony souborů by měly být odděleny čárkou.
 watchexec --exts py,js,css,html <command>
  • Spusťte příkaz, když se změní jakýkoli soubor v lib nebo src. Volba „-w“ sleduje konkrétní soubor nebo adresář v systému.
watchexec -w lib -w src <command>
  • Zavolejte/restartujte jakoukoli službu, když se změní jakýkoli soubor v aktuálním adresáři (a všech podadresářích).
watchexec -e html -r tor

watchexec -e js,py -r mysql

Zde volba „-r“ restartuje proces nebo službu, pokud běží v systému.

Další příklady použití watchexec naleznete na adrese oficiální úložiště GitHub.

entr

entr je jednoduchý a vynikající nástroj příkazového řádku pro spouštění libovolných příkazů, když v daném adresáři nastanou nějaké úpravy.

„Entr“ je zkratka pro Event Notify Test Runner. Tento nástroj byl vytvořen s cílem poskytnout rychlou zpětnou vazbu a automatizované testování.

Instalace

entr je předinstalovaný v distribuci Linuxu. V případě, že chybí, musíte jej nainstalovat ručně.

Tento nástroj se snadno používá a lze jej nainstalovat pomocí následujícího příkazu.

sudo apt-get install entr

Nebo jej můžete také nainstalovat klonováním oficiálního Git úložiště.

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

Dále přejděte do tohoto adresáře a nainstalujte požadavky pomocí níže uvedených příkazů.

./configure
make test
make install

Chcete-li zobrazit dostupné možnosti sestavení, spusťte ./configure -h

Ukázkové příklady příkazů

Chcete-li zobrazit možnosti a argumenty dostupné pro příkaz entr. Použijte následující příkaz.

man entr

Tento příkaz zobrazí uživatelskou příručku pro příkaz 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)
  • Chcete-li spustit a automaticky znovu načíst server MySQL, když se v pracovním adresáři změní jakýkoli soubor JavaScript. Pokaždé, když jsou změny uloženy do souboru, entr znovu načte MySQL server.
 ls *.js | entr -r mysql
  • Chcete-li automaticky znovu načíst webový server nebo ukončit, pokud server skončí.
$ ls * | entr -rz ./httpd

Pro více podrobností a příkladů o příkazu entr můžete navštívit jejich úředníka úložiště GitHub.

Slova na závěr 👩‍💻

Doufám, že jste našli tento článek velmi užitečným při učení, jak spouštět příkazy Linuxu, když se jakýkoli soubor v daném adresáři změní a když jsou vytvořeny nové soubory.

Možná vás také bude zajímat, jak odstranit soubory a adresáře v Linuxu.