Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Watch folder
Envoyé par: Sibalou

Bonjour,

Je cherche un script sur linux me permettant de créer un watch folder, c'est à dire un dossier surveiller qui analyse ce qui ce passe.
Quand un nouveau fichier est arrivé et qu'il à finit d'être copier, celui-ci est alors renvoyer à un autre script.

Est-ce que quelqu'un à une idée car je n'ai rien trouvé pour l'instant !

Poste le Wednesday 13 June 2007 12:31:09
Répondre     Citer    
Re: Watch folder
Envoyé par: ankou29666

ça me parait pas être la meilleure solution mais on pourrait lister le répertoire toutes les N secondes et chercher les différences par rapport au listing précédent ...

Mais cette "solution" n'est pas sans créer un problème ... le nouveau fichier apparait dès sa création et non pas à sa cloture ... On pourrait contourner le problème en mémorisant le dernier fichier créé, et dès qu'un nouveau est créé, on fait ce qu'on a à faire sur celui qui devient l'avant dernier ... Pas forcément inintéressant si tes fichiers arrivent en bloc, il resterait à traiter le cas du dernier du bloc, mais s'ils arrivent un par un de manière aléatoire, oublie tout ce que j'ai dit ...



Ce qu'il faudrait en gros serait que ton script puisse intercepter un signal indiquant qu'un nouveau fichier a été créé dans le répertoire, mais la grande question est comment obtenir ce signal ?!?

Poste le Friday 15 June 2007 11:40:17
Répondre     Citer    
Re: Watch folder

Pourrais tu préciser un peu plus ton problème dans sa globalité. Quelle est ta finalité et que veux tu faire. Précise aussi tes entrées et sorties de façons la plus abstraite possible.

C'est en posant le problème de façon la plus générale que tu auras le plus de réponses pertinente. Il existe peut-être déjà une réponse simple d'ailleurs.

Dans la plus part des cas, un problème semble ne pas avoir de solution car il est mal posé.

Après tout, pour le "watch folder", c'est faisable (je pense à find ou des astuces comme inotify), mais je suis pas sur qu'on puisse pas trouver plus élégant en reformulant le problème !

C'est en forgeant qu'on devient forgeron, et c'est en sciant que Léonard De Vinci !

Mon site perso

Poste le Friday 15 June 2007 12:18:02
Répondre     Citer    
Re: Watch folder
Envoyé par: Sibalou

Merci pour les réponses...

Je m'explique davantage.

En fait je voudrais faire une sorte d'usine avec des scripts s'effectuent automatiquement à l'arrivée de fichier.

Quand j'envoi un fichier par ftp sur ma machine linux, je voudrais que ce fichier puisse être détecté et traité (encodé) avant d'être copier dans dossier final. La difficulté est qu'il faut que le traitement commence qu'une fois le fichier arrivé et que plusieurs fichiers peuvent arriver en temps ou dans un laps de temps très court.

J'espère que cela est assez clair.

Poste le Friday 15 June 2007 16:10:30
Répondre     Citer    
Re: Watch folder
Envoyé par: oudoubah

Le mieux selon moi est d'utiliser la commande sleep dans ton script, pour attendre un peu lorsqu'il n'y a pas de fichiers.

Pour savoir si les fichiers sont bien arrivés, si c'est possible, je ferais un md5sum du côté client. Lorsque le transfert de la vidéo est fini, je copierais le md5 sur le serveur.
Au niveau serveur, je listerais *.md5 dans le répertoire. Si il y en a, tu vérifies l'intégrité de tes données (après tout, ça sert à ça), puis tu effectues le traitement (et supprime le .md5).

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 Friday 15 June 2007 16:23:31
Répondre     Citer    
Re: Watch folder
Envoyé par: Sibalou

L'idée est intéressante mais je crois que cela va être compliquer à mettre en oeuvre coté client.

En fait coté client (mac os) se sont des personnes non expérimenter qui travail et m'envoi par simple glisser/déposer sur mon ftp les fichiers à traiter.

Poste le Friday 15 June 2007 16:29:35
Répondre     Citer    
Re: Watch folder

L'impératif de vitesse est-il important ?

Je pensais à une tache cron toutes les n minutes qui traiterait tout les fichiers contenus dans le répertoire d'arrivée.

C'est en forgeant qu'on devient forgeron, et c'est en sciant que Léonard De Vinci !

Mon site perso

Poste le Friday 15 June 2007 17:33:32
Répondre     Citer    
Re: Watch folder
Envoyé par: Sibalou

L'impératif de vitesse est important car il s'agit d'une petite société de production. Le but est d'automatiser la procédure d'encode et de mise à disposition du public pour une diffusion plus rapide.

Le problème avec cron c'est qu'il risque de traiter un fichier en cours de transfert ou déjà en traitement si il n'y a pas un suivi du dossier.

Il faut que j'arrive à trouver mais je n'ai pas encore la solution sous lunix. Avec Mac OSX j'utilise les actions sur dossier avec un script comme celui-ci.

on adding folder items to thisFolder after receiving theItems
-- this is the standard intro for a folder action
repeat with f in theItems
-- wait for the item to be all there
set Was to 0
set isNow to 1
repeat while isNow ≠ Was
-- the basic idea is that the script loops until the file size is the same for more than 30 seconds. That means
the file has finished copying.
set Was to size of (info for f)
-- this section is getting the file size of the video
delay 30
set isNow to size of (info for f)
-- this section is sampling the file size 30 seconds later
end repeat
tell application "Finder"
open theItems using application file "Droplet.app" of folder "Desktop" of folder "YourUserName" of folder "Users"
of startup disk
end tell
end repeat -- get next item f in thisFolder
end adding folder items to

Le problème est que je ne sais pas faire un script équivalent à celui-ci pour linux...

Poste le Friday 15 June 2007 17:44:59
Répondre     Citer    
Re: Watch folder
Envoyé par: panthere noire

pour détecter le fichier, je verifierais la taille du répertoire avec df. maintenant pour ce qui est de savoir si le fichier a fini d'être uploader. le seul moyen est de savoir si le client est encore connecter avec un netstat.
donc je ferai : 1 si client vien de ce connecter = en attente de deconnection avec sleep ,2 client déconnecter , on vérifie la taille du rep, si c'est bon on fait le traitement voulu.

evidament l'ideal c'est de faire la tach avec cron toute les minutes, sinon tu peux faire une boucle, mai sa va faire uzine a gaz.

net install--> sid2.6.32 dist i386
fluxbox
nvidia 8800gtx 768 ddr3

Poste le Friday 15 June 2007 18:14:14
Répondre     Citer    
Re: Watch folder

Il suffit d'ajouter un flag de gestion de fichier, ou même simplement un test avec la sortie de ps ux !

C'est en forgeant qu'on devient forgeron, et c'est en sciant que Léonard De Vinci !

Mon site perso

Poste le Friday 15 June 2007 18:53:25
Répondre     Citer    
Re: Watch folder
Envoyé par: oudoubah

Ce serait alors un script du genre :

#!/bin/sh

SCRIPTNAME="script_conversion.sh"

LISTE_FICHIERS=$(ls /ftp)
FICHIERS_OUVERTS=$(lsof | grep '/ftp/.*')

for fichier in $LISTE_FICHIERS ; do
   echo $FICHIERS_OUVERTS | grep -q $fichier
   if [ $? -ne 0 ] ; then
      echo "Traitement de $fichier"
      # lancer le traitement via un script en background
      traitement.sh &
   fi
done

dans la crontab

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 Friday 15 June 2007 19:23:02
Répondre     Citer    
Re: Watch folder

[code=bash]
#!/bin/sh

LISTE_FICHIERS=$(ls /ftp | tr -d $(lsof | grep '/ftp/.*') )
for fichier in $LISTE_FICHIERS
do
echo "Traitement de $fichier"
# lancer le traitement via un script en background
traitement.sh &
fi
done[/code]

C'est en forgeant qu'on devient forgeron, et c'est en sciant que Léonard De Vinci !

Mon site perso

Poste le Friday 15 June 2007 19:55:04
Répondre     Citer    
Re: Watch folder
Envoyé par: oudoubah

Citation
Vincent-Xavier JUMEL
#ls /ftp | tr -d $(lsof | grep
'/ftp/.*')

Pour le comportement de tr, je suis assez étonné que cela fonctionne (comprendre : j'aurais pû me simplifier bien des scripts ;-))

D'habitude, j'utilise le tr pour supprimer un ou plusieurs caractères :
tr -d '\n '
Mais dans ton utilisation, tu supprimes des mots et non plus des caractères. Est-ce que tu aurais des éclaircissements dessus?

Pour en revenir au script, il faut faire un
grep -o '/ftp/.*'
pour n'avoir que les noms de fichiers.

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 Friday 15 June 2007 20:19:55
Répondre     Citer    
Re: Watch folder

Hum, j'ai pas testé dans ce cas particulier, mais je me souviens m'en être servi. A utiliser avec prudence alors, y'a peut-être des comportements bizarres.

Je croyais avoir lu dans des docs POSIX sur le shell que la syntaxe $STRING1-$STRING2 devait aussi fonctionner, ce qui serait encore plus élégant à mon avis ! Mais comme je ne retrouve plus, je préfères éviter.

C'est en forgeant qu'on devient forgeron, et c'est en sciant que Léonard De Vinci !

Mon site perso

Poste le Friday 15 June 2007 22:34:10
Répondre     Citer    
Re: Watch folder
Envoyé par: Sibalou

ok, c'est génial...
j'essaye tout de suite !

Poste le Monday 18 June 2007 11:58:53
Répondre     Citer    
Re: Watch folder
Envoyé par: Sibalou

ça marche, c'est génial...
exactement ce que je voulais !!!

;-p

Poste le Tuesday 19 June 2007 11:27:43
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Watch folder
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

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