Hvordan utføre kommandoen når filen endres i Linux?

Du har kommet til rett sted hvis du vil lære hvordan du kjører Linux-kommandoer når en fil i en arbeidskatalog endres og når nye filer opprettes.

I Linux kan du bruke cron til å planlegge kommandoer som skal kjøres til bestemte tider.

Men hva om du trenger kommandoer som skal kjøres hver gang en fil endres, eller en ny fil legges til i en katalog?

Det er også lett oppnåelig, og det er noen kommandolinjeverktøy for å utføre det.

La oss komme i gang!

watchexec

watchexec er et hendig og frittstående verktøy som overvåker en gitt arbeidskatalog og utfører en kommando hvis den oppdager endringer som filoppdatering eller ny filoppretting.

Funksjoner

  • Det krever ikke en kompleks kommandolinje som involverer xargs (utvidede argumenter).
  • Sjekker for endringer i gjeldende katalog og alle underkataloger i sanntid.
  • Det er ikke behov for en språkkjøring, og den er ikke koblet til noe spesifikt språk eller økosystem.
  • .gitignore og .ignore brukes som standard for å bestemme hvilke filer som skal ignoreres varsler for.
  • Prosessgrupper brukes til å holde styr på gaffelprogrammer.
  • Å se på filer med en viss utvidelse støttes.
  • Den er kompatibel med OS X, Linux og Windows.
  • Filtrering og ignorering av hendelser basert på glob (filsøkemønstre for å finne delvis identiske filnavn er mulig.

Installasjon av watchexec

For enkelt å installere watchexec-verktøyet, lim inn følgende lenke i terminalen eller en shell-prompt, og trykk enter.

  Hvordan se ledig diskplass og diskbruk fra Linux-terminalen

Linux og macOS

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

Etter vellykket installasjon vil banen vises på skjermen. I mitt tilfelle ble dette verktøyet installert 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

Og etter installasjonen, naviger til .local/bin-depotet og kontroller om filen er der eller ikke ved å bruke disse kommandoene.

cd .local/bin

ls

Det neste trinnet er å eksportere banen for å bruke watchexec-verktøyet.

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

For å kjøre, skriv bare watchexec i terminalen som en root-bruker. Bruk denne kommandoen for å se hvilke flagg og alternativer som kan brukes med watchexec-verktøyet.

watchexec --help

Eksempel på kommandoer

  • Ring ls -la når en fil endres i denne katalogen/underkatalogen. Denne kommandoen viser alle filene som finnes i katalogen hver gang den oppdager endringer.
watchexec -- ls -la
  • Når noen av python-, js-, CSS- eller HTML-utvidelsesfilene i gjeldende katalog endres, kjør kommandoen. Her kan du sende hvilken som helst kommando du vil. Filtypene skal være atskilt med komma.
 watchexec --exts py,js,css,html <command>
  • Kjør kommandoen når en fil i lib eller src endres. Alternativet «-w» ser på en bestemt fil eller katalog i systemet.
watchexec -w lib -w src <command>
  • Ring/start en hvilken som helst tjeneste når en fil i gjeldende katalog (og alle underkataloger) endres.
watchexec -e html -r tor

watchexec -e js,py -r mysql

Her starter «-r»-alternativet prosessen eller tjenesten på nytt hvis den kjører i systemet.

  Hvordan installere LXQt på Linux

For flere eksempler på bruk av watchexec kan du besøke offisielle GitHub-depot.

entr

entr er et enkelt og utmerket kommandolinjeverktøy for å kjøre vilkårlige kommandoer når det skjer endringer i en gitt katalog.

«entr» står for Event Notify Test Runner. Dette verktøyet ble laget med mål om å gi rask tilbakemelding og automatisert testing.

Installasjon

entr er forhåndsinstallert i Linux-distribusjonen. I tilfelle den mangler, må du installere den manuelt.

Dette verktøyet er enkelt å bruke og kan installeres med følgende kommando.

sudo apt-get install entr

Eller du kan også installere den ved å klone den offisielle Git repository.

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

Deretter navigerer du til den katalogen og installer kravene ved å bruke kommandoene nedenfor.

./configure
make test
make install

For å se tilgjengelige byggealternativer, kjør ./configure -h

Eksempel på kommandoer

For å se alternativene og argumentene som er tilgjengelige for kommandoen entr. Bruk følgende kommando.

man entr

Denne kommandoen viser brukermanualen for kommandoen 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)
  • Å starte og automatisk laste inn en MySQL-server når en JavaScript-fil endres i arbeidskatalogen. Hver gang endringene lagres i filen, laster entr inn MySQL-serveren på nytt.
 ls *.js | entr -r mysql
  • For å laste en webserver på nytt automatisk eller avslutte hvis serveren avsluttes.
$ ls * | entr -rz ./httpd

For flere detaljer og eksempler på entr-kommandoen, kan du besøke deres offisielle GitHub-depot.

  Hvordan spille Metro Exodus på Linux

Siste ord 👩‍💻

Jeg håper du fant denne artikkelen veldig nyttig for å lære hvordan du kjører Linux-kommandoer når en fil i en gitt katalog endres og når nye filer opprettes.

Du kan også være interessert i å lære hvordan du fjerner filer og kataloger i Linux.