Inotifywait (Teil von Inotify-Tools ) ist das richtige Werkzeug, um Ihr Ziel zu erreichen. Es spielt keine Rolle, dass mehrere Dateien gleichzeitig erstellt werden, sie werden sie erkennen.
Hier ein Beispielskript:
#!/bin/sh MONITORDIR="/path/to/the/dir/to/monitor/" inotifywait -m -r -e create --format '%w%f' "$" | while read NEWFILE do echo "This is the body of your mail" | mailx -s "File $ has been created" "yourmail@addresshere.tld" done
Inotifywait verwendet diese Optionen.
-m um das Verzeichnis unbegrenzt zu überwachen, wenn Sie diese Option nicht verwenden, wird das Skript beendet, sobald eine neue Datei gefunden wurde.
-r überwacht Dateien rekursiv (bei vielen Verzeichnissen / Dateien kann es eine Weile dauern, bis die neu erstellten Dateien erkannt werden)
-e create ist die Option zum Festlegen des zu überwachenden Ereignisses. In Ihrem Fall sollte es erstellt werden, um sich um neue Dateien zu kümmern
--format '% w% f' druckt die Datei im Format /complete/path/file.name aus
"$ " ist die Variable, die den Pfad enthält, den Sie zuvor überwacht haben.
So in dem Fall, dass eine neue Datei erstellt wird, wird es inotifywait erkennen und wird die Ausgabe drucken (/complete/path/file.name) an das Rohr und wird, während die Ausgabe an variable NEWFILE zuweisen .
In der while-Schleife sehen Sie eine Möglichkeit, eine E-Mail mit dem Dienstprogramm mailx an Ihre Adresse zu senden, das mit Ihrem lokalen MTA (in Ihrem Fall Postfix) einwandfrei funktionieren sollte.
Wenn Sie mehrere Verzeichnisse überwachen möchten, lässt dies inotifywait dies nicht zu. Sie haben jedoch zwei Optionen. Erstellen Sie ein Skript für jedes Verzeichnis, das Sie überwachen möchten, oder erstellen Sie eine Funktion innerhalb des Skripts.
#!/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 $ has been created" "yourmail@addresshere.tld" done } monitor "$MONITORDIR1" & monitor "$MONITORDIR2" & monitor "$MONITORDIRX" &