Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/09/2006, 16h46   #1
Futur Membre du Club
 
Inscription : janvier 2005
Messages : 64
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 64
Points : 16
Points : 16
Par défaut Lister les dossiers avec un for

Bonjour,

Je suis en train d'essayer de faire un script qui liste tous les dossiers et uniquement les dossiers contenus dans un dossier parent (.temp) :

Code :
1
2
3
4
5
 
for i in `find $CIBLE_NAME/.temp -type d`
do
    echo "$i"
done
mon problème : cela ne fonctionne pas correctement avec les noms de dossiers qui ont un espace : chaque mot composant le nom du dossier dans $i est vu comme un dossier.

si quelqu'un peut me donner un coup de main...

merci d'avance :-)
Franckinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2006, 19h48   #2
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
perso, je n'ai jamais réussi... cela vient du fait qu'une fois que tout est stocké dans une string, on ne fait plus la différence entre "toto" "tata" et "toto tata"
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2006, 19h54   #3
Futur Membre du Club
 
Inscription : janvier 2005
Messages : 64
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 64
Points : 16
Points : 16
merci pour ta réponse.

et tu ne connaitrais pas une autre façon de le faire ?
Franckinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2006, 20h17   #4
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
la seule solution que j'ai trouvé, c'est remplacer l'espace par une chaine lors du find. après, il suffit de remplacer cette chaine par un espace. c'est un peu usine à gaz
Code :
1
2
3
4
for i in $(find -type d -exec echo '{}' ';'|sed "s/ /espace/g" -); 
do 
     echo $i|sed "s/espace/ /g" -; 
done
à défaut de mieux
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2006, 23h25   #5
Membre émérite
 
Avatar de Pouic
 
Inscription : octobre 2004
Messages : 668
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2004
Messages : 668
Points : 904
Points : 904
Code :
1
2
3
4
5
6
7
8
9
10
$ ls *
greu greu:
titi:
toto:
 
$ find . -type d -exec echo {} \;
.
./toto
./titi
./greu greu
__________________
Software becomes slower faster than hardware becomes faster

http://xrenault.developpez.com
API C standard (C ANSI )
Pouic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2006, 23h38   #6
Futur Membre du Club
 
Inscription : janvier 2005
Messages : 64
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 64
Points : 16
Points : 16
merci pour vos réponses je vais voir ce que je peux faire
Franckinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 10h14   #7
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Une solution est de jouer sur la variable IFS (Internal Field Separator) :
Code :
1
2
3
4
5
6
7
 
IFS=$'\t\n'
for i in $(find -type d -print); 
do 
     echo $i 
done
unset IFS
Ainsi, le blanc est retiré de la liste des séparateurs et est considéré comme un caractère "ordinaire".

Le unset final permet de restituer la valeur par défaut de IFS.

Vis-à-vis des manipulations d'IFS, plutôt que de procéder comme je l'ai fait (fixer la valeur, puis revenir à la valeur par défaut), il peut être préférable de sauver l'ancienne valeur pour la restituer en fin de traitement ... c'est plus respectueux du contexte.
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h10.


 
 
 
 
Partenaires

Hébergement Web