Wenn Sie erfahren möchten, wie Sie unter Linux Befehle automatisch ausführen lassen, wenn sich Dateien in einem bestimmten Ordner verändern oder neue Dateien hinzugefügt werden, sind Sie hier genau richtig.
Unter Linux ist es üblich, den `cron`-Dienst zu nutzen, um Befehle zu bestimmten Zeiten automatisch ausführen zu lassen.
Doch was, wenn Sie Befehle nicht zeitgesteuert, sondern immer dann ausführen möchten, wenn eine Datei modifiziert wird oder ein Verzeichnis neue Dateien aufnimmt?
Auch das ist relativ einfach zu realisieren und es gibt einige Kommandozeilenwerkzeuge, die genau das ermöglichen.
Legen wir los!
watchexec
watchexec ist ein nützliches, eigenständiges Programm, das ein Verzeichnis überwacht und bei Änderungen, wie zum Beispiel Dateiaktualisierungen oder der Erstellung neuer Dateien, einen festgelegten Befehl ausführt.
Funktionen
- Es benötigt keine komplexen Befehlszeilen mit `xargs` (erweiterten Argumenten).
- Überprüft das aktuelle Verzeichnis und alle Unterverzeichnisse in Echtzeit auf Änderungen.
- Es ist keine spezifische Laufzeitumgebung erforderlich, und es ist nicht an eine bestimmte Programmiersprache oder ein Ökosystem gebunden.
- `.gitignore` und `.ignore` werden standardmäßig verwendet, um festzulegen, für welche Dateien Benachrichtigungen ignoriert werden sollen.
- Prozessgruppen werden verwendet, um abgeleitete Programme zu verfolgen.
- Die Überwachung von Dateien mit bestimmten Dateiendungen wird unterstützt.
- Es ist kompatibel mit macOS, Linux und Windows.
- Ereignisse können basierend auf Glob-Mustern (Muster zur Dateisuche, die partielle Übereinstimmungen ermöglicht) gefiltert und ignoriert werden.
Installation von watchexec
Um das Werkzeug „Watchexec“ einfach zu installieren, kopieren Sie die folgende Zeile in Ihr Terminal oder die Kommandozeile und bestätigen Sie mit der Eingabetaste.
Linux & macOS
curl -sS https://webinstall.dev/watchexec | bash
Nach erfolgreicher Installation wird der Installationspfad angezeigt. In diesem Beispiel wurde das Programm unter `/root/.local/bin` installiert.
┌──(root💀kali)-[~]
└─# curl -sS https://webinstall.dev/watchexec | bash
Thanks for using webi to install 'watchexec' 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 Ordner `.local/bin` und überprüfen Sie mit den folgenden Befehlen, ob die Datei vorhanden ist:
cd .local/bin
ls
Der nächste Schritt ist das Exportieren des Pfads, um das `watchexec` Tool nutzen zu können:
export PATH="/root/.local/bin:$PATH"
Um das Tool zu starten, geben Sie einfach `watchexec` als Root-Benutzer in das Terminal ein. Verwenden Sie folgenden Befehl, um zu sehen, welche Flags und Optionen mit dem `watchexec`-Tool verwendet werden können.
watchexec --help
Beispielbefehle
- Führen Sie `ls -la` aus, wenn sich eine Datei in diesem Verzeichnis/Unterverzeichnis ändert. Dieser Befehl zeigt alle im Verzeichnis vorhandenen Dateien an, wenn eine Änderung erkannt wird.
watchexec -- ls -la
- Führen Sie den definierten Befehl aus, sobald sich eine Datei mit der Erweiterung `py`, `js`, `css` oder `html` im aktuellen Verzeichnis ändert. Die Dateiendungen müssen durch Kommas getrennt sein.
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 Verzeichnis im System.
watchexec -w lib -w src <command>
- Starten/starten Sie jeden Dienst neu, wenn sich eine Datei im aktuellen Verzeichnis (oder einem Unterverzeichnis) ä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.
Weitere Beispiele für die Anwendung von `watchexec` finden Sie im offiziellen GitHub-Repository.
entr
Eintr ist ein einfaches und effizientes Kommandozeilenprogramm, um beliebige Befehle auszuführen, wenn Änderungen in einem bestimmten Verzeichnis stattfinden.
`entr` steht für „Event Notify Test Runner“. Das Werkzeug wurde entwickelt, um schnelles Feedback und automatisierte Tests zu ermöglichen.
Installation
`entr` ist in vielen Linux-Distributionen bereits vorinstalliert. Sollte dies nicht der Fall sein, muss es manuell installiert werden.
Dieses Werkzeug ist einfach zu bedienen und kann mit dem folgenden Befehl installiert werden:
sudo apt-get install entr
Oder Sie können es installieren, indem Sie das offizielle Git-Repository klonen.
git clone https://github.com/eradman/entr.git
Navigieren Sie anschließend zu diesem Ordner und installieren Sie die Anforderungen mit den folgenden Befehlen:
./configure
make test
make install
Um die verfügbaren Build-Optionen zu sehen, führen Sie `./configure -h` aus.
Beispielbefehle
Um die Optionen und Argumente für den Befehl `entr` anzuzeigen, verwenden Sie 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)
- Um einen MySQL-Server zu starten und automatisch neu zu laden, wenn sich eine JavaScript-Datei im aktuellen Ordner ändert. Bei jeder Änderung der Datei 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
Weitere Informationen und Beispiele für den Befehl `entr` finden Sie im offiziellen GitHub-Repository.
Abschließende Worte 👩💻
Ich hoffe, dieser Artikel hat Ihnen geholfen, zu verstehen, wie Sie Linux-Befehle automatisch ausführen, wenn sich Dateien in einem bestimmten Verzeichnis ändern oder neue Dateien erstellt werden.
Vielleicht interessiert Sie auch, wie man Dateien und Verzeichnisse unter Linux entfernt.