Shell, boucler sur des directory [Résolu]

wire less 213 Messages postés lundi 5 octobre 2009Date d'inscription 4 décembre 2017 Dernière intervention - 1 déc. 2017 à 09:59 - Dernière réponse : UnGnU 609 Messages postés lundi 2 mai 2016Date d'inscription 11 décembre 2017 Dernière intervention
- 5 déc. 2017 à 07:44
Bonjour,
Je me suis fais un script pour parcourir des répertoires et faire une certaine action.

C'est toujours la même action, il y a juste le nom des répertoires qui changes
Repertoire_1
Repertoire_2
Repertoire_Toto
Repertoire_Jacques
Repertoire_5

Du coup, je faire désespérément comment faire une boucle sur des noms de répertoire !!

Je sais pas ... Est-ce qu'il est possible en shell de stoker les différents nom de répertoire dans une liste, et ensuite de les parcourir ?

Genre :
Liste = [Repertoire_1 ; Repertoire_2 ; Repertoire_Toto ; Repertoire_Jacques ; Repertoire_5]

For i in Liste
cd Liste(i)
echo(Salut !)
Mon_Traitement
cd ..
Next


J'ai l'impression que c'est pas si simple que ça à faire en shell !

Merci.


Afficher la suite 
213Messages postés lundi 5 octobre 2009Date d'inscription 4 décembre 2017 Dernière intervention

14 réponses

Répondre au sujet
UnGnU 609 Messages postés lundi 2 mai 2016Date d'inscription 11 décembre 2017 Dernière intervention - 1 déc. 2017 à 10:39
0
Utile
Salut,

Une façon de faire :
$ cat liste.txt
Repertoire_1
Repertoire_2
Repertoire_Toto
Repertoire_Jacques
Repertoire_5

$ while read i; do echo "Répertoire : ${i}"; done < liste.txt
Répertoire : Repertoire_1
Répertoire : Repertoire_2
Répertoire : Repertoire_Toto
Répertoire : Repertoire_Jacques
Répertoire : Repertoire_5


;-))
Commenter la réponse de UnGnU
wire less 213 Messages postés lundi 5 octobre 2009Date d'inscription 4 décembre 2017 Dernière intervention - 1 déc. 2017 à 11:34
0
Utile
1
Ok !!

Bon, je suis un boulet ... et j'ai compris que le shell c'est quand même bien particulier !!


Donc en gros mon script va ressembler à ça ? :

#!/bin/bash
#script de parcours de repertoire :

$ cat liste.txt
Repertoire_1
Repertoire_2
Repertoire_Toto
Repertoire_Jacques
Repertoire_5

$ while read i; do
cd ${i}
echo "je suis dans le repertoire :"
pwd
Mon_Traitement 
cd ..
done < liste.txt

UnGnU 609 Messages postés lundi 2 mai 2016Date d'inscription 11 décembre 2017 Dernière intervention - 1 déc. 2017 à 12:24
Oui. A condition toutefois que les répertoires listés soient tous présents dans le répertoire d'où est lancé le script.
Commenter la réponse de wire less
wire less 213 Messages postés lundi 5 octobre 2009Date d'inscription 4 décembre 2017 Dernière intervention - 1 déc. 2017 à 16:31
0
Utile
10
Hey hey !! ça marche pô

#!/bin/bash
#script de parcours de repertoire :

$ cat liste.txt
Repertoire_1
Repertoire_2
Repertoire_Toto
Repertoire_Jacques
Repertoire_5


$ while read i; do
cd ${i}
echo "je suis dans le repertoire :"
pwd
cd ..
done < liste.txt



J'execute mon script :

bash New_Laucher.sh

Et j'ai les erreurs suivantes !

New_Laucher.sh: ligne 4: $ : commande introuvable
New_Laucher.sh: ligne 5: Repertoire_1 : est un dossier 
New_Laucher.sh: ligne 6: Repertoire_2 : est un dossier
New_Laucher.sh: ligne 7: Repertoire_Toto : est un dossier
New_Laucher.sh: ligne 8: Repertoire_Jacques : est un dossier
New_Laucher.sh: ligne 9: Repertoire_5 : est un dossier
New_Laucher.sh: ligne 12: erreur de syntaxe près du symbole inattendu « do »
New_Laucher.sh: ligne 12: `$ while read i; do'


T'as une idée ?
qqchquicommenceparQ 884 Messages postés dimanche 24 mai 2009Date d'inscription 10 décembre 2017 Dernière intervention > UnGnU 609 Messages postés lundi 2 mai 2016Date d'inscription 11 décembre 2017 Dernière intervention - 4 déc. 2017 à 15:34
on peut se dispenser de
sed
:
while read line; do [[ $line =~ ^# ]] || echo "$line"; done < fichier
UnGnU 609 Messages postés lundi 2 mai 2016Date d'inscription 11 décembre 2017 Dernière intervention > qqchquicommenceparQ 884 Messages postés dimanche 24 mai 2009Date d'inscription 10 décembre 2017 Dernière intervention - 4 déc. 2017 à 15:37
D'où le "Oui, mais il faudra rajouter une condition avant de traiter chaque ligne. " ;-)
qqchquicommenceparQ 884 Messages postés dimanche 24 mai 2009Date d'inscription 10 décembre 2017 Dernière intervention > UnGnU 609 Messages postés lundi 2 mai 2016Date d'inscription 11 décembre 2017 Dernière intervention - 4 déc. 2017 à 16:45
ah, d'accord. j'ai mal interprété tes propos.
j'avais compris que tu te servais de
sed
pour ça (à cause du où : pas "à quel endroit", mais "ou alors").
:(
UnGnU 609 Messages postés lundi 2 mai 2016Date d'inscription 11 décembre 2017 Dernière intervention > qqchquicommenceparQ 884 Messages postés dimanche 24 mai 2009Date d'inscription 10 décembre 2017 Dernière intervention - 5 déc. 2017 à 07:44
Oups... Au temps pour moi ;-(

Mais où avais-je la tête ? Ou bien aurai-je oublié mes fondamentaux ? Hou la honte ;-)
wire less 213 Messages postés lundi 5 octobre 2009Date d'inscription 4 décembre 2017 Dernière intervention - 1 déc. 2017 à 16:58
Bon ok.
ça marche, mais tu avais mal expliqué !!

(Je plaisante bien sur ... Mais je t'avais pourtant dis que j'étais un boulet !!
Fallait p't'être préciser gros gros boulet...)

Donc en gros ...
$
, ça c'est le prompteur, il faut pas l'écrire dans le script.

j'ai crée un fichier avec :
touch liste.txt


dedans j'y ai écrit :
Repertoire_1
Repertoire_2
Repertoire_Toto
Repertoire_Jacques
Repertoire_5


ensuite j'ai fais un script shell :
touch Laucher.sh

Dedans j'y ai mis :

while read i; do
cd ${i}
echo "je suis dans le repertoire :"
pwd
cd ..
done < liste.txt

je l’exécute
bash Laucher.sh
:

Et j'ai bien eu le résultat :
je suis dans le repertoire :
Repertoire_1
je suis dans le repertoire :
Repertoire_2
je suis dans le repertoire :
Repertoire_Toto
je suis dans le repertoire :
Repertoire_Jacques
je suis dans le repertoire :
Repertoire_5


Voila !
Merci tout le monde
Commenter la réponse de wire less