[gull] Truc et astuces: inotifywait en mode moniteur

felix felix at f-hauri.ch
Wed Apr 27 11:48:36 CEST 2016


Bonjour,

Voici une méthode propre et efficace pour réagir à la création ou modification
d'un fichier, dans un(ou plusieurs) répertoire donné(s):

 .1 Ouvrez un terminal de commande et tapez les commandes suivantes:

    ext=(php css autre)
    while :;do
        subname=''
        ((RANDOM%10))||printf -v subname -- "-%04x" $RANDOM
        date >/tmp/test$subname.${ext[RANDOM%3]}
        sleep 1
      done

 Ceci va générer une écriture par seconde, dans /tmp, en créant ou
 modifiant des fichier dont le nom sera au hasard test.css, test.php
 ou test.autre, mais en ajoutant au hasard, approximativement 1x/10,
 un tiret et un nombre hexadecimal, avant l'extension.

 .2 Ouvrez un autre terminal, et tapez:

    waitPaths=(/{home,tmp})
    while read file ;do
        if [ "$file" ] &&
         ( [ -z "${file##*.php}" ] || [ -z  "${file##*.css}" ] ) ;then
            (($(stat -c %Y-%X $file)))||echo -n new
            echo file: $file, content:
            cat $file
        fi
      done < <(
        inotifywait -qme close_write --format %w%f ${waitPaths[*]}
    )

 - La variable waitPath contient la liste des répertoires à surveiller.
   A noter que j'évite d'utiliser l'option `-r' d'inotifywait car elle
   consomme bcp de ressources.
 - la variable file contient le chemin et le nom de fichier
 - le ``if'' teste la présence de `.css|.php'
 - le ``stat'' compare la date de création avec la date de modification

Voilà. Pour ceux que cela intéresse, j'ai posté une version plus élaborée
sur StackOverflow, (qui utilise le même premier script):

http://stackoverflow.com/questions/36848645/how-to-monitor-newly-created-file-in-a-directory-with-bash/36870432#36870432

Bon hacks, à+!

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list