Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
surveiller un dossier
Envoyé par: sami_c

Salut,
comment je peux surveiller le contenu d'un dossier ? le but étant de faire en sorte qu'un traitement soit lancé sur les fichiers qui on été copié dans un dossier donné
Exp : je veux surveiller le dossier TOTO
ce dossier est accessible par mon site web, les utilisateurs y déposent des fichiers vidéos
dès qu'un nouveau fichier est déposé, je lance un traitement sur ce fichier
et ainsi de suite...

Comment peut-on implémenter tout ça ?

Poste le Tuesday 3 April 2007 12:35:10
Répondre     Citer    
Re: surveiller un dossier
Envoyé par: oudoubah

Le plus simple est de faire ça via une tâche cron.

Est-ce qu'ensuite le fichier est déplacé?
Si oui, tu fais ton traitement sur chaque fichier de ce dossier.
Si non, tu le fais sur chaque fichier ajouté (tu peux ajouter les fichiers traités dans une liste, et ne traiter que les fichiers qui ne sont pas dans cette liste, utiliser la commande stat pour savoir quand ils ont été modifiés,...)

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Tuesday 3 April 2007 13:15:11
Répondre     Citer    
Re: surveiller un dossier
Envoyé par: sami_c

les fichiers seront traités et copiés (ou peut être déplacés, si c'est plus facile) sur un autre serveur
stp tu peux me donner un bout de code ?

Poste le Tuesday 3 April 2007 16:22:54
Répondre     Citer    
Re: surveiller un dossier

POSIX ne permet pas vraiement de surveiller un dossier (en toute rigueur et généralité).

En pratique, on peut par exemple (pour le recopier ailleurs) utiliser un syncrhoniseur (unison, rdist, rsync, ....) depuis un cron.

Linux offre, pour certains systèmes de fichier, les appels systèmes de notification. Voir
man 7 inotify

je n'en sais pas plus, et c'est un linuxisme, donc non portable sur d'autres unix ou posix.

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Tuesday 3 April 2007 18:22:12
Répondre     Citer    
Re: surveiller un dossier
Envoyé par: nicola

Au hasard, FAM (file alteration monitor) ne sait pas faire ça ?

--
On ne prête qu’aux riches, et on a bien raison, parce que les autres remboursent difficilement.
-+- Tristan Bernard (1866-1947) -+-

Poste le Tuesday 3 April 2007 19:27:59
Répondre     Citer    
Re: surveiller un dossier
Envoyé par: Sve@r

Citation
sami_c
stp tu peux me donner un bout de code ?
Ce bout de code "script shell" surveille un répertoire (passé en argument)
Dès

#!/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

Bon, j'ai tapé ça vite fait (sans le tester mais j'ai confiance). Il est sûrement très perfectible mais pour l'instant, c'est tout ce que je vois.
Il te suffit de lancer ce script en arrière-plan en lui donnant en arguments les répertoires à surveiller.

Pour tester, tu ouvres une seconde console et tu l'utilises pour aller copier un fichier dans un des répertoires à surveiller. Normallement dans la première fenêtre, il devrait apparaître le nom du fichier.

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Wednesday 4 April 2007 21:54:25
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
surveiller un dossier
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons