notifywait (partie d'inotify-tools) est le bon outil pour atteindre votre objectif, peu importe que plusieurs fichiers soient créés en même temps, il les détectera.
Voici un exemple 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" "[email protected]"
done
notifywait utilisera ces options.
-m pour surveiller le répertoire indéfiniment, si vous n'utilisez pas cette option, une fois qu'il aura détecté un nouveau fichier, le script se terminera.
-r surveillera les fichiers de manière récursive (s'il y a beaucoup de répertoires/fichiers, la détection des nouveaux fichiers créés peut prendre un certain temps)
-e créer est l'option pour spécifier l'événement à surveiller et dans votre cas, il devrait être create s'occuper des nouveaux fichiers
--format '%w%f' imprimera le fichier au format /complete/path/file.name
"${MONITORDIR}" est la variable contenant le chemin à surveiller que nous avons défini auparavant.
Ainsi, dans le cas où un nouveau fichier est créé, inotifywait le détectera et imprimera la sortie (/complete/path/file.name) vers le tube et tandis que assignera cette sortie à la variable NEWFILE .
À l'intérieur de la boucle while, vous verrez un moyen d'envoyer un e-mail à votre adresse à l'aide de l'utilitaire mailx cela devrait fonctionner correctement avec votre MTA local (dans votre cas, Postfix).
Si vous souhaitez surveiller plusieurs répertoires, inotifywait ne le permet pas mais vous avez deux options, créez un script pour chaque répertoire à surveiller ou créez une fonction à l'intérieur du script, quelque chose comme ceci :
#!/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" &
Utilisez inotifywait, par exemple :
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
Pour plus d'informations et d'exemples, consultez l'article
Comment utiliser inotify-tools pour déclencher des scripts sur les événements du système de fichiers.