[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