inotifywait (Teil von inotify-tools ) ist das richtige Tool, um Ihr Ziel zu erreichen. Es spielt keine Rolle, dass mehrere Dateien gleichzeitig erstellt werden, es erkennt sie.
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" "yourmail@addresshere.tld"
done
inotifywait verwendet diese Optionen.
-m , um das Verzeichnis auf unbestimmte Zeit zu überwachen. Wenn Sie diese Option nicht verwenden, wird das Skript beendet, sobald eine neue Datei erkannt wurde.
-r überwacht Dateien rekursiv (wenn viele Verzeichnisse / Dateien vorhanden sind, kann es eine Weile dauern, bis die neu erstellten Dateien erkannt werden).
-e create ist die Option, um das zu überwachende Ereignis anzugeben. 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
"$ {MONITORDIR}" ist die Variable, die den zuvor definierten Pfad zur Überwachung enthält.
Wenn also eine neue Datei erstellt wird, erkennt inotifywait diese und druckt die Ausgabe (/complete/path/file.name) an die Pipe und weist diese Ausgabe der Variablen NEWFILE zu .
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) problemlos funktionieren sollte.
Wenn Sie mehrere Verzeichnisse überwachen möchten, lässt inotifywait dies nicht zu, Sie haben jedoch zwei Möglichkeiten: Erstellen Sie ein Skript für jedes zu überwachende Verzeichnis 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 ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &