inotify : surveiller des répertoires

Billet posté le 12 févr. 2012

Il y a quelques mois j’ai eu un besoin particulier.

L’idée est assez simple : déclencher une action quand il y a une écriture ou une modification dans un dossier. Ca semble assez con mais j’ai un peu galéré.

Il existe un mécanisme dans le kernel Linux qui s’appelle inotify.

Pour plus d’information je vous invite à consulter la page wikipedia http://fr.wikipedia.org/wiki/Inotify

Bon le truc aussi c’est que la programmation je suis pas bon. Du coup en voyant du C je me suis dis que j’étais mal parti. Mais non, car il existe une solution !

Il existe un package qui permet de lancer une commande shell et d’effectuer les actions en question.

Pour installer le package :

apt-get install inotify-tools

Ce package nous donne deux commandes shell :

/usr/bin/inotifywait
/usr/bin/inotifywatch

Pour le besoin décrit ci-dessus seule la commande inotifywait m’intéressait.

Ci-dessous un petit script shell qui donne un exemple de ce qu’il est possible d’effectuer comme traitement :

#!/bin/sh

export LANG=C

/usr/bin/inotifywait -e create,delete \
-mrq /mon/repertoire | while read line; do
echo "$(date "+%a, %d %b %G %T %z") ; $line" >> /tmp/NOUVEAUX_FICHIERS.txt
sed -i 's/ CREATE //' /tmp/NOUVEAUX_FICHIERS.txt
sed -i 's/ DELETE //' /tmp/NOUVEAUX_FICHIERS.txt
done

Comme on peut le voir c’est hyper simple, mais ça marche comme attendu.

Pour aller plus loin, un de mes potes (kleph pour ne pas le citer) m’a donné un lien très intéressant qui unie du python et inotify : https://github.com/seb-m/pyinotify/wiki/List-of-Examples

Bref pour résumer on peut faire des choses super puissantes de manière simple.