GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erkennen Sie kontinuierlich neue Dateien mit inotify-Tools in mehreren Verzeichnissen rekursiv

notifywait (Teil von inotify-tools) ist das richtige Werkzeug, um Ihr Ziel zu erreichen, egal ob mehrere Dateien gleichzeitig erstellt werden, es wird sie erkennen.

Hier ein Beispielskript:

#!/bin/sh
MONITORDIR="/path/to/the/dir/to/monitor/"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
        echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "[email protected]"
done

notifywait wird diese Optionen verwenden.

-m um das Verzeichnis auf unbestimmte Zeit zu überwachen, wenn Sie diese Option nicht verwenden, wird das Skript beendet, sobald es eine neue Datei entdeckt hat.

-r überwacht Dateien rekursiv (wenn es viele Verzeichnisse/Dateien gibt, kann es eine Weile dauern, bis die neu erstellten Dateien erkannt werden)

-e erstellen ist die Option, das zu überwachende Ereignis anzugeben, und in Ihrem Fall sollte es erstellen sein sich um neue Dateien kümmern

--formatiere '%w%f' druckt die Datei im Format /complete/path/file.name

"${MONITORDIR}" ist die Variable, die den zu überwachenden Pfad enthält, den wir zuvor definiert haben.

Falls also eine neue Datei erstellt wird, wird inotifywait diese erkennen und die Ausgabe drucken (/complete/path/file.name) in die Pipe und während diese Ausgabe der Variablen NEWFILE zuweist .

Innerhalb der While-Schleife sehen Sie eine Möglichkeit, mit dem mailx-Dienstprogramm eine E-Mail an Ihre Adresse zu senden das sollte gut mit Ihrem lokalen MTA (in Ihrem Fall Postfix) funktionieren.

Wenn Sie mehrere Verzeichnisse überwachen möchten, erlaubt inotifywait dies nicht, aber Sie haben zwei Möglichkeiten:Erstellen Sie ein Skript für jedes zu überwachende Verzeichnis oder erstellen Sie eine Funktion innerhalb des Skripts, etwa so:

#!/bin/sh
MONITORDIR1="/path/to/the/dir/to/monitor1/"
MONITORDIR2="/path/to/the/dir/to/monitor2/"
MONITORDIRX="/path/to/the/dir/to/monitorx/"    

monitor() {
inotifywait -m -r -e create --format "%f" "$1" | while read NEWFILE
do
        echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "[email protected]"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &

Verwenden Sie zum Beispiel inotifywait:

inotifywait -m /path -e create -e moved_to |
    while read path action file; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
        # do something with the file
    done

Weitere Informationen und Beispiele finden Sie im Artikel
Verwendung von inotify-tools zum Auslösen von Skripten bei Dateisystemereignissen.


Linux
  1. Skript zum Überwachen des Ordners auf neue Dateien?

  2. Wie lösche ich Verzeichnisse rekursiv mit Wildcard?

  3. CloudCross – Synchronisieren Sie Dateien und Verzeichnisse mit mehreren Cloud-Speichern

  4. Linux findet rekursiv Dateinamen mit der angegebenen Zeichenfolge

  5. Herunterladen einer Datei mit wget über mehrere Verbindungen

So ändern Sie Dateiberechtigungen rekursiv mit chmod in Linux

So kopieren Sie eine Datei in mehrere Verzeichnisse unter Linux

Kopieren Sie eine Datei in mehrere Verzeichnisse von der Befehlszeile unter Linux

So erstellen Sie neue Benutzer in OpenShift mit htpasswd und OAuth

So kopieren Sie eine Datei mit einem Befehl in mehrere Verzeichnisse unter Linux

So kopieren Sie Dateien mit einer bestimmten Dateierweiterung rekursiv