Wie führe ich den Befehl aus, wenn sich die Datei in Linux ändert?

Sie sind an der richtigen Stelle, wenn Sie lernen möchten, wie Sie Linux-Befehle ausführen, wenn sich eine Datei in einem Arbeitsverzeichnis ändert und wenn neue Dateien erstellt werden.

Unter Linux können Sie cron verwenden, um Befehle so zu planen, dass sie zu bestimmten Zeiten ausgeführt werden.

Was aber, wenn Befehle jedes Mal ausgeführt werden müssen, wenn eine Datei geändert oder einem Verzeichnis eine neue Datei hinzugefügt wird?

Das ist auch leicht zu erreichen, und es gibt einige Befehlszeilen-Tools, um das auszuführen.

Lass uns anfangen!

watchexec

watchexec ist ein praktisches und eigenständiges Tool, das ein bestimmtes Arbeitsverzeichnis überwacht und einen Befehl ausführt, wenn es Änderungen wie Dateiaktualisierungen oder die Erstellung neuer Dateien erkennt.

Merkmale

  • Es erfordert keine komplexe Befehlszeile mit xargs (erweiterten Argumenten).
  • Überprüft das aktuelle Verzeichnis und alle Unterverzeichnisse in Echtzeit auf Änderungen.
  • Es ist keine Sprachlaufzeit erforderlich und es ist nicht mit einer bestimmten Sprache oder einem bestimmten Ökosystem verbunden.
  • .gitignore und .ignore werden standardmäßig verwendet, um zu entscheiden, für welche Dateien Benachrichtigungen ignoriert werden sollen.
  • Prozessgruppen werden verwendet, um Forking-Programme zu verfolgen.
  • Das Ansehen von Dateien mit einer bestimmten Erweiterung wird unterstützt.
  • Es ist mit OS X, Linux und Windows kompatibel.
  • Filtern und Ignorieren von Ereignissen basierend auf Glob (Dateisuchmuster zum Auffinden teilweise identischer Dateinamen ist möglich.

Installation von watchexec

Um das Watchexec-Tool einfach zu installieren, fügen Sie den folgenden Link in das Terminal oder eine Shell-Eingabeaufforderung ein und drücken Sie die Eingabetaste.

Linux & macOS

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

Nach erfolgreicher Installation wird der Pfad auf dem Bildschirm angezeigt. In meinem Fall wurde dieses Tool in /root/.local/bin installiert

┌──(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

Navigieren Sie nach der Installation zum Repository .local/bin und prüfen Sie mit diesen Befehlen, ob die Datei vorhanden ist oder nicht.

cd .local/bin

ls

Der nächste Schritt besteht darin, den Pfad zu exportieren, um das watchexec-Tool zu verwenden.

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

Geben Sie zum Ausführen einfach watchexec als Root-Benutzer in das Terminal ein. Verwenden Sie diesen Befehl, um zu sehen, welche Flags und Optionen mit dem watchexec-Tool verwendet werden können.

watchexec --help

Beispielbefehle

  • Rufen Sie ls -la auf, wenn sich eine Datei in diesem Verzeichnis/Unterverzeichnis ändert. Dieser Befehl zeigt alle im Verzeichnis vorhandenen Dateien an, wenn er eine Änderung erkennt.
watchexec -- ls -la
  • Führen Sie den Befehl immer dann aus, wenn sich eine der Python-, js-, CSS- oder Html-Erweiterungsdateien im aktuellen Verzeichnis ändert. Hier können Sie jeden gewünschten Befehl übergeben. Die Dateiendungen sollten durch ein Komma getrennt werden.
 watchexec --exts py,js,css,html <command>
  • Führen Sie den Befehl aus, wenn sich eine Datei in lib oder src ändert. Die Option „-w“ überwacht eine bestimmte Datei oder ein bestimmtes Verzeichnis im System.
watchexec -w lib -w src <command>
  • Rufen Sie jeden Dienst auf/starten Sie ihn neu, wenn sich eine Datei im aktuellen Verzeichnis (und allen Unterverzeichnissen) ändert.
watchexec -e html -r tor

watchexec -e js,py -r mysql

Hier startet die Option „-r“ den Prozess oder Dienst neu, wenn er im System ausgeführt wird.

  So stellen Sie verlorene Daten unter Linux wieder her

Weitere Anwendungsbeispiele für watchexec finden Sie unter offizielles GitHub-Repository.

Eintr

Eintr ist ein einfaches und ausgezeichnetes Befehlszeilenprogramm zum Ausführen beliebiger Befehle, wenn Änderungen in einem bestimmten Verzeichnis vorgenommen werden.

„entr“ steht für Event Notify Test Runner. Dieses Tool wurde mit dem Ziel entwickelt, schnelles Feedback und automatisierte Tests zu ermöglichen.

Installation

entr ist in der Linux-Distribution vorinstalliert. Falls es fehlt, müssen Sie es manuell installieren.

Dieses Tool ist einfach zu bedienen und kann mit dem folgenden Befehl installiert werden.

sudo apt-get install entr

Oder Sie können es auch installieren, indem Sie die offizielle Datei klonen Git-Repository.

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

Navigieren Sie als Nächstes zu diesem Verzeichnis und installieren Sie die Anforderungen mit den folgenden Befehlen.

./configure
make test
make install

Um die verfügbaren Build-Optionen anzuzeigen, führen Sie ./configure -h aus

  Wie man Stellaris unter Linux spielt

Beispielbefehle

Um die Optionen und Argumente anzuzeigen, die für den Befehl entr verfügbar sind. Verwenden Sie den folgenden Befehl.

man entr

Dieser Befehl zeigt das Benutzerhandbuch für den Befehl entr an.

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)
  • Zum Starten und automatischen Neuladen eines MySQL-Servers, wenn sich eine JavaScript-Datei im Arbeitsverzeichnis ändert. Jedes Mal, wenn die Änderungen in der Datei gespeichert werden, lädt entr den MySQL-Server neu.
 ls *.js | entr -r mysql
  • Um einen Webserver automatisch neu zu laden oder zu beenden, wenn der Server beendet wird.
$ ls * | entr -rz ./httpd

Für weitere Details und Beispiele zum Befehl entr können Sie deren offiziellen besuchen GitHub-Repository.

  So installieren Sie das Moka Icon-Design unter Linux

Schlussworte 👩‍💻

Ich hoffe, Sie fanden diesen Artikel sehr hilfreich, um zu lernen, wie Sie Linux-Befehle ausführen, wenn sich eine Datei in einem bestimmten Verzeichnis ändert und wenn neue Dateien erstellt werden.

Möglicherweise möchten Sie auch erfahren, wie Sie Dateien und Verzeichnisse in Linux entfernen.