Menu

Shell, boucler sur des directory [Résolu/Fermé]

Messages postés
215
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
29 août 2018
- - Dernière réponse : UnGnU
Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
- 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 

3 réponses

Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
164
0
Merci
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


;-))
Messages postés
215
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
29 août 2018
2
0
Merci
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
Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
164 -
Oui. A condition toutefois que les répertoires listés soient tous présents dans le répertoire d'où est lancé le script.
Messages postés
215
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
29 août 2018
2
0
Merci
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 ?
Utilisateur anonyme > UnGnU
Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
-
on peut se dispenser de
sed
:
while read line; do [[ $line =~ ^# ]] || echo "$line"; done < fichier
UnGnU
Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
164 > Utilisateur anonyme -
D'où le "Oui, mais il faudra rajouter une condition avant de traiter chaque ligne. " ;-)
Utilisateur anonyme > UnGnU
Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
-
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
Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
164 > Utilisateur anonyme -
Oups... Au temps pour moi ;-(

Mais où avais-je la tête ? Ou bien aurai-je oublié mes fondamentaux ? Hou la honte ;-)
wire less
Messages postés
215
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
29 août 2018
2 -
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