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.