Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Lister le contenu d'un répertoire fichier par fichier
Envoyé par: ankou29666

Bonjour

J'ai un nombre non négligeable de fichiers à traiter et afin d'en accélérer le traitement je souhaiterais créer un script pour le distribuer entre plusieurs machine ...

Le programme pour effectuer ce traitement tourne au poil ... Je souhaite donc utiliser un script (bash à priori) pour ce faire ...

Les fichiers sont classés dans deux répertoires : à traiter et traités ... Le premier est donc plein et le second est vide avant de commencer, et l'inverse quand la tache est finie ...

Ce que je souhaite faire, afin d'éviter que deux machines ne traitent deux fois le même fichier, le script liste le contenu du répertoire A CHAQUE PASSAGE DE LA BOUCLE, et n'en récupère qu'un seul fichier (qui sera déplacé ensuite dans le dossier traité) et effectue son traitement dessus ...

Mon problème est : Comment puis-je obtenir le nom d'UN SEUL fichier parmi tous ceux qui se trouvent dans le répertoire ???

j'ai déjà un script qui tourne mais pour une seule machine :
#!/usr/bash
for i in `ls`
do
    echo "$i"
    traitement_du_fichier "$i"
done

mais en fait le problème de ce script, si je le mets directement comme ça distribué en déplaçant le fichier traité, c'est qu'il va aller chercher des fichiers qui n'existent plus, puisque la liste des fichiers est effectuée au début du script et n'est plus réactualisée avec les fichiers qui auront été déplacés puis traités entretemps ...

Merci d'avance pour vos idées ...

Poste le Thursday 12 October 2006 16:40:40
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: oudoubah

#!/bin/sh

encore=1
[ -d /tmp/traitement_en_cours ] || mkdir /tmp/traitement_en_cours 
while [ encore = 1 ] ; do
...encore=0
...fichier=$(ls | head -n 1)
...mv $fichier /tmp/traitement_en_cours/$fichier
...# traitements sur le fichier
done
rmdir /tmp/traitement_en_cours

Ca devrait aller (je n'ai pas testé)

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 Thursday 12 October 2006 18:30:09
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: ankou29666

ok d'accord ...

ça correspond à peu près à ce que je désirais ...

il faut filtrer la commande ls par la commande head ... J'avais espéré pouvoir trouvé qqch du genre mais je n'avais pas trouvé cette commande ...

Par contre c'est le mécanisme pour tester si le répertoire est vide et sortir de la boucle que je n'ai pas compris ... (et qui à vue de nez me semble foireux, j'espère ne pas te vexer) ...

Merci beaucoup ...

Poste le Thursday 12 October 2006 18:44:01
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: oudoubah

Mon script est foireux :-))

#!/bin/sh

[ -d /tmp/traitement_en_cours ] || mkdir /tmp/traitement_en_cours 

fichier=$(ls | head -n 1)
while [ -n "$fichier" ] ; do
...mv $fichier /tmp/traitement_en_cours/$fichier
...# traitements sur le fichier
...fichier=$(ls | head -n 1)
done
rmdir /tmp/traitement_en_cours &> /dev/null

tout d'abord, on crée le répertoire /tmp/traitement_en_cours si il n'existe pas
Tant que l'on trouve un fichier, on le déplace dans le répertoire de traitement

à la fin, on essaie de supprimer le répertoire de traitement. Si il y a encore un fichier dedans, il ne sera pas détruit. C'est juste pour finir proprement

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 Thursday 12 October 2006 20:18:57
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: ankou29666

Merci, c'est parfait ça marche ... ^o^^o^^o^

Pourrais tu (ou qqn d'autre) m'expliquer un peu ce que veulent dire :
[ -d /tmp/traitement_en_cours ] , [ -n "$fichier" ] ainsi que la double barre || ???


Poste le Thursday 12 October 2006 20:59:41
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: oudoubah

Citation
man test
-d FILE : FILE existe et est un répertoire
-n STRING : la taille de STRING n'est pas nulle
Citation


||, c'est le "ou".

on pourrait écrire la même chose comme ça :
if [ ! -d /tmp/repertoire ] ; then
...mkdir /tmp/repertoire
fi

La partie droite d'un "ou" n'est évaluée que si la partie gauche est fausse. Donc la partie droite ne sera exécutée que si [ -d /tmp/rep ] est faux, i.e. si le répertoire n'existe pas.

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 Thursday 12 October 2006 21:14:25
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: ankou29666

oui pour le || j'avais trouvé ça dans un pdf sur le shell laché par sve@r (merci au passage) que j'ai réussi à trouver en me baladant dans ce forum ...

mais ça expliquait pas le coup du [] ... Donc si j'ai bien compris [ expression ] revient à "test expression" ...

Tu aurais également pu faire mkdir --parents /tmp/repertoire ... ça aurait été aussi simple ... Voire plus ... :ange:

Poste le Thursday 12 October 2006 21:43:52
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: oudoubah

Citation
ankou29666
Tu aurais également pu faire mkdir --parents
/tmp/repertoire ... ça aurait été aussi simple ...
Voire plus ...

non je n'aurais pas pu, tout bêtement parce que je ne connaissais pas cette option :-))

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 13 October 2006 08:42:18
Répondre     Citer    
Re: Lister le contenu d’un répertoire fichier par fichier
Envoyé par: nicola

Ou mkdirhier.

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

Poste le Friday 13 October 2006 12:46:57
Répondre     Citer    
Re: Lister le contenu d'un répertoire fichier par fichier
Envoyé par: Sve@r

Citation
ankou29666
oui pour le || j'avais trouvé ça dans un pdf sur le shell laché par sve@r (merci au passage)
Yeah ^^D-*

Citation
ankou29666
mais ça expliquait pas le coup du []
sisi, regarde bien en page 26...

Citation
ankou29666
... Donc si j'ai bien compris [ expression ] revient à "test expression" ...
Page 26 !!!

Citation
ankou29666
Tu aurais également pu faire mkdir --parents /tmp/repertoire ... ça aurait été aussi simple ... Voire plus ...
Oui... mais ça dépend de ta plateforme cible. Si elle ne connait pas l'option "-p", c'est un risque...


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

Poste le Friday 13 October 2006 21:03:53
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Lister le contenu d'un répertoire fichier par fichier
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