1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/bin/sh
# Script qui surveille les répertoires de façon infinie
# Usage: prog rep1 [rep2 ...]
# Ecriture de la fonction qui lance un traitement quelconque
# Argument 1: Nom du fichier à traiter
traitement()
{
(
# Ici on programme le traitement (un simple "echo" pour l'exemple)
echo $1
)
}
# Ecriture de la fonction dont le but est de surveiller un répertoire
# Argument 1: Nom du répertoire à surveiller
# Argument 2: Nom du fichier qui sert à conserver les infos
surveillance()
{
(
# Balayage de chaque fichier du répertoire donné en argument 1
ls -a $1 |while read file
do
# Si le fichier n'est pas présent dans les infos (donné en argument 2)
grep "^$file$" $2 1>/dev/null; status=$?
if test $status -ne 0
then
# Le fichier est nouveau - Lancement du traitement
traitement $1/$file
fi
# On regénère les infos à partir du "ls"
ls -a $1 >$2
done
)
}
# Ecriture du programme principal
# S'il n'y a pas d'argument, pas la peine de continuer
test $# -eq 0 && exit 1
# On diminue la priorité du script (après tout, il n'est pas vraiment primordial)
nice -20
# On récupère le nom du script (servira de base aux noms des fichiers de travail)
script=`basename $0 .sh`
# Boucle de surveillance infinie
while true
do
# Traitement de chaque répertoire donné en argument
for rep in $*
do
# Création du nom qui servira à stocker les infos du répertoire
# On utilise le nom du répertoire en remplaçant "/" par ":"
info=`echo "$rep" |sed -e "s/\//:/g"`
# Surveillance du répertoire avec le fichier qui servira de mémoire
surveillance "$rep" "/tmp/$script.$info.bdd"
done
# Petite tempo parce qu'on ne va pas surveiller à chaque nanoseconde
sleep 1
done |
Partager