Hur man kör kommandot när filen ändras i Linux?

Du har kommit till rätt plats om du vill lära dig hur du kör Linux-kommandon när en fil i en arbetskatalog ändras och när nya filer skapas.

I Linux kan du använda cron för att schemalägga kommandon att köras vid vissa tidpunkter.

Men vad händer om du behöver kommandon som ska köras varje gång en fil ändras eller en ny fil läggs till i en katalog?

Det är också lätt att uppnå, och det finns några kommandoradsverktyg för att utföra det.

Låt oss börja!

watchexec

watchexec är ett praktiskt och fristående verktyg som övervakar en given arbetskatalog och kör ett kommando om det upptäcker några ändringar som filuppdatering eller skapande av nya filer.

Funktioner

  • Det kräver inte en komplex kommandorad som involverar xargs (utökade argument).
  • Söker efter ändringar i den aktuella katalogen och alla underkataloger i realtid.
  • Det finns inget behov av en språkkörning, och den är inte kopplad till något specifikt språk eller ekosystem.
  • .gitignore och .ignore används som standard för att bestämma vilka filer som ska ignoreras aviseringar för.
  • Processgrupper används för att hålla reda på gaffelprogram.
  • Titta på filer med en viss förlängning stöds.
  • Den är kompatibel med OS X, Linux och Windows.
  • Filtrera och ignorera händelser baserat på glob (filsökningsmönster för att hitta delvis identiska filnamn är möjligt.

Installation av watchexec

För att enkelt installera watchexec-verktyget, klistra in följande länk i terminalen eller en skalprompt och tryck på enter.

Linux och macOS

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

Efter den lyckade installationen kommer sökvägen att visas på skärmen. I mitt fall installerades det här verktyget i /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

Och efter installationen, navigera till .local/bin-förvaret och kontrollera om filen finns där eller inte genom att använda dessa kommandon.

cd .local/bin

ls

Nästa steg är att exportera sökvägen för att använda watchexec-verktyget.

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

För att köra, skriv bara watchexec i terminalen som en root-användare. Använd det här kommandot för att se vilka flaggor och alternativ som kan användas med watchexec-verktyget.

watchexec --help

Exempel på kommandon

  • Ring ls -la när någon fil ändras i denna katalog/underkatalog. Detta kommando visar alla filer som finns i katalogen när det upptäcker någon ändring.
watchexec -- ls -la
  • Kör kommandot när någon av python-, js-, CSS- eller HTML-tilläggsfilerna i den aktuella katalogen ändras. Här kan du skicka vilket kommando du vill. Filtilläggen ska separeras med kommatecken.
 watchexec --exts py,js,css,html <command>
  • Kör kommandot när någon fil i lib eller src ändras. Alternativet ”-w” tittar på en specifik fil eller katalog i systemet.
watchexec -w lib -w src <command>
  • Ring/starta om valfri tjänst när någon fil i den aktuella katalogen (och alla underkataloger) ändras.
watchexec -e html -r tor

watchexec -e js,py -r mysql

Här startar alternativet ”-r” om processen eller tjänsten om den körs i systemet.

För fler exempel på användning av watchexec kan du besöka officiellt GitHub-förråd.

entr

entr är ett enkelt och utmärkt kommandoradsverktyg för att köra godtyckliga kommandon när några ändringar sker i en given katalog.

”entr” står för Event Notify Test Runner. Detta verktyg skapades med målet att göra snabb feedback och automatiserad testning.

Installation

entr är förinstallerat i Linux-distributionen. Om den saknas måste du installera den manuellt.

Detta verktyg är enkelt att använda och kan installeras med följande kommando.

sudo apt-get install entr

Eller så kan du också installera det genom att klona tjänstemannen Git repository.

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

Navigera sedan till den katalogen och installera kraven med hjälp av nedanstående kommandon.

./configure
make test
make install

För att se tillgängliga byggalternativ kör ./configure -h

Exempel på kommandon

För att se de alternativ och argument som är tillgängliga för kommandot enter. Använd följande kommando.

man entr

Detta kommando visar användarmanualen för kommandot 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)
  • Att starta och automatiskt ladda om en MySQL-server när någon JavaScript-fil ändras i arbetskatalogen. Varje gång ändringarna sparas i filen laddar entr om MySQL-servern.
 ls *.js | entr -r mysql
  • Att automatiskt ladda om en webbserver eller avsluta om servern avslutas.
$ ls * | entr -rz ./httpd

För mer information och exempel på kommandot entr kan du besöka deras officiella GitHub-förråd.

Sista ord 👩‍💻

Jag hoppas att du tyckte att den här artikeln var mycket användbar för att lära dig hur man kör Linux-kommandon när en fil i en given katalog ändras och när nya filer skapas.

Du kanske också är intresserad av att lära dig hur du tar bort filer och kataloger i Linux.