inotifywait (parte das inotify-tools ) é a ferramenta certa para atingir seu objetivo, não importa que vários arquivos estejam sendo criados ao mesmo tempo, ele os detectará.
Aqui está um exemplo de script:
#!/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
O inotifywait usará essas opções.
-m para monitorar o diretório indefinidamente, se você não usar esta opção, uma vez que ele detectou um novo arquivo, o script terminará.
-r monitorará os arquivos recursivamente (se houver muitos diretórios / arquivos, pode demorar um pouco para detectar os novos arquivos criados)
-e create é a opção para especificar o evento a ser monitorado e, no seu caso, deve ser criado para cuidar de novos arquivos
--format '% w% f' imprimirá o arquivo no formato /complete/path/file.name
"$ {MONITORDIR}" é a variável que contém o caminho para monitorar que definimos anteriormente.
Assim, no caso de um novo arquivo é criado, inotifywait irá detectá-lo e imprimir a saída (/complete/path/file.name) para o tubo e enquanto vai atribuir a saída para newfile variável .
Dentro do loop while, você verá uma maneira de enviar um email para o seu endereço usando o utilitário mailx que deve funcionar bem com o MTA local (no seu caso, Postfix).
Se você deseja monitorar vários diretórios, o inotifywait não permite, mas você tem duas opções: crie um script para cada diretório monitorar ou crie uma função dentro do script, algo como isto:
#!/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" &