GNU/Linux >> Tutoriels Linux >  >> Linux

Détecter en continu de nouveaux fichiers avec inotify-tools dans plusieurs répertoires de manière récursive

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.


Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Comment trouver un fichier sous Linux dans tous les répertoires de manière récursive

  3. Script pour surveiller le dossier pour les nouveaux fichiers ?

  4. Utiliser Inotify pour surveiller l'accès à un fichier ?

  5. CloudCross – Synchroniser les fichiers et les répertoires avec plusieurs stockages cloud

Comment modifier les autorisations de fichiers de manière récursive avec chmod sous Linux

Comment copier un fichier dans plusieurs répertoires sous Linux

Copier un fichier dans plusieurs répertoires à partir de la ligne de commande sous Linux

Comment créer de nouveaux utilisateurs dans OpenShift avec htpasswd et OAuth

Comment copier un fichier avec une seule commande dans plusieurs répertoires sous Linux

Comment copier des fichiers avec une extension de fichier spécifique de manière récursive