inotifywait (частина inotify-tools ) - це правильний інструмент для досягнення вашої мети, неважливо, що декілька файлів створюються одночасно, він їх виявить.
Ось зразок сценарію:
#!/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 використовуватиме ці параметри.
-m для моніторингу режиму нескінченно, якщо ви не використовуєте цю опцію, як тільки він виявить новий файл, сценарій закінчиться.
-r буде ревізувати файли рекурсивно (якщо багато dirs / файлів, це може зайняти деякий час, щоб виявити нові створені файли)
-e create - це можливість вказати подію для моніторингу, і у вашому випадку її слід створити, щоб подбати про нові файли
--формат '% w% f' роздрукує файл у форматі /complete/path/file.name
"$ {MONITORDIR}" - це змінна, що містить шлях для моніторингу, який ми визначили раніше.
Тож у випадку, якщо буде створений новий файл, inotifywait виявить його та надрукує вихід (/complete/path/file.name) у трубу і одночасно призначить цей вихід змінній NEWFILE .
Всередині циклу while ви побачите спосіб надсилання пошти на вашу адресу за допомогою утиліти mailx, яка повинна добре працювати з вашим локальним MTA (у вашому випадку Postfix).
Якщо ви хочете контролювати декілька каталогів, inotifywait не дозволяє, але у вас є два варіанти, створіть сценарій для кожного dir для моніторингу або створіть функцію всередині сценарію, приблизно так:
#!/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" &