inotifywait (qui fait partie des outils inotify ) 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
inotifywait utilisera ces options.
-m pour surveiller le répertoire indéfiniment, si vous n'utilisez pas cette option, une fois qu'il a 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, cela pourrait prendre un certain temps pour détecter les nouveaux fichiers créés)
-e create est la possibilité de spécifier l'événement à surveiller et dans votre cas, il doit être créé pour prendre soin 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.
Donc, dans le cas où un nouveau fichier est créé, inotifywait le détectera et imprimera la sortie (/complete/path/file.name) dans le tube et while assignera cette sortie à la variable NEWFILE .
Dans la boucle while, vous verrez un moyen d'envoyer un courrier à votre adresse à l'aide de l' utilitaire mailx qui devrait fonctionner correctement avec votre MTA local (dans votre cas, Postfix).
Si vous voulez surveiller plusieurs répertoires, inotifywait ne le permet pas mais vous avez deux options, créez un script pour chaque dir à 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:
Pour plus d'informations et d'exemples, consultez l'article
Comment utiliser les outils inotify pour déclencher des scripts sur des événements de système de fichiers .
la source
Pour plusieurs répertoires, vous pouvez le faire:
Voici un exemple de liste de dossiers dans le fichier
/etc/default/inotifywait /etc/default/inotifywait
la source