inotifywait (součást inotify-tools) je správný nástroj k dosažení vašeho cíle, nezáleží na tom, že se vytváří několik souborů současně, detekuje je.
Zde je ukázkový skript:
#!/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
inotifywait použije tyto možnosti.
-m chcete-li donekonečna sledovat adresář, pokud tuto možnost nepoužijete, skript se ukončí, jakmile detekuje nový soubor.
-r bude monitorovat soubory rekurzivně (pokud existuje mnoho adresářů/souborů, může chvíli trvat, než zjistí nově vytvořené soubory)
-e vytvořit je možnost určit událost, která se má sledovat, a ve vašem případě by měla být vytvořit starat se o nové soubory
--format '%w%f' vytiskne soubor ve formátu /complete/path/file.name
"${MONITORDIR}" je proměnná obsahující cestu k monitorování, kterou jsme definovali dříve.
Takže v případě, že je vytvořen nový soubor, inotifywait jej detekuje a vytiskne výstup (/complete/path/file.name) do potrubí a whilepřiřadí tento výstup proměnné NEWFILE .
Uvnitř smyčky while uvidíte způsob, jak odeslat e-mail na vaši adresu pomocí utility mailx to by mělo fungovat dobře s vaším localMTA (ve vašem případě Postfixem).
Pokud chcete monitorovat několik adresářů, inotifywait to neumožňuje, ale máte dvě možnosti, vytvořte skript pro každý adresář, který chcete monitorovat, nebo vytvořte funkci uvnitř skriptu, něco takového:
#!/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" &
Použijte inotifywait, například:
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
Další informace a příklady naleznete v článku
Jak používat inotify-tools ke spouštění skriptů na událostech souborového systému.