OVH Cloud OVH Cloud

Terminal : produire une liste de répertoires

73 réponses
Avatar
olivier.marti
Bonjour,

Je souhaite travailler sur une liste de répertoires, avec un script ksh
du genre :

LISTE=$( find . -type d -print )

for DIR in ${LISTE}
do
cd "${DIR}"
...

Mais dans ma liste de répertoire certains noms contiennent des blancs.
Le 'for' les considère comme des séparateurs, et ça ne vas pas du tout !

Comment faire ?

Olivier

10 réponses

1 2 3 4 5
Avatar
laurent.pertois
Olivier Marti wrote:

--exec c'est pour faire une commande simple derrière, type rm, file, etc
... Mais si on a beaucoup de choses à faire derrière ?


<J'vais encore dire une connerie mais tant pis>

Une fonction ?

</J'ai fini de dire ma connerie>

:-)

--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.

Avatar
olivier.marti
Eric Levenez wrote:

Le 22/05/07 23:06, dans <1hyjetf.2qz8k8147xxudN%,

#!/bin/ksh
J'ai un mirbsdksh installé par Fink, et il a ça.






Tu as écrasé le ksh du système par celui de MirBSD ?


Non en fait la je tourne sur le ksh d'origine. Pas celui de /sw/bin.

Olivier






Avatar
olivier.marti
Eric Levenez wrote:

Le 22/05/07 23:06, dans <1hyjeml.d2xvy32r2vvqN%,

Ben non, vraiment rien, même pas une fois :

#!/bin/ksh

ROOT_DIR=$(pwd)

+ pwd
+ ROOT_DIR=/Users/marti/Web/Documents/DODS-IPSL
find ${ROOT_DIR} -type d -print | while read DIR
do
echo "$DIR"
cd "${DIR}"
pwd
done

+ find /Users/marti/Web/Documents/DODS-IPSL -type d -print
+ read DIR
echo fini
+ echo fini
fini


?????

Chez vous ça marche.


Oui le même code que ci-dessus marche. Testé sur ma machine.

find /Users/marti/Web/Documents/DODS-IPSL -type d -print

donne bien une liste de répertoires (une vingtaine)


Je suppose que le code que tu postes n'est pas exactement celui que tu
utilises.


Je poste très exactement ce qui s'affiche quand je fait ksh -vx
mon_script ......

Mais je viens d'essayer /sw/bin/mksh -vx mon_script
et ça marche.

J'ai donc un soucis avec /bin/ksh, et pas avec le mirbsdksh installé
avec Fink

?????

Olivier


Avatar
Nicolas Michel
Olivier Marti wrote:

Bonjour,

Je souhaite travailler sur une liste de répertoires, avec un script ksh
du genre :

LISTE=$( find . -type d -print )

for DIR in ${LISTE}
do
cd "${DIR}"
...

Mais dans ma liste de répertoire certains noms contiennent des blancs.
Le 'for' les considère comme des séparateurs, et ça ne vas pas du tout !

Comment faire ?


La définition du séparateur se fait avec la variable IFS.
De plus, en général un simple " " suffit à protéger un espace dans un
nom.

donc ça ferait un truc genre :
******************
#!/bin/sh

OldIFS='$IFS'
IFS='
'
for i in $(find . -type d -print )
do
cd "$i"
....
done
******************

--
Nicolas Michel

Avatar
Nicolas Michel
Olivier Marti wrote:
Je souhaite travailler sur une liste de répertoires, avec un script ksh
du genre :
[snip]


Au fait pourquoi utiliser du ksh et pas du bash ou du sh ?


--
Nicolas Michel

Avatar
Eric Levenez
Le 23/05/07 8:15, dans <1hyk3ze.1a7ilomkehrxkN%,
« Olivier Marti » a écrit :

Je poste très exactement ce qui s'affiche quand je fait ksh -vx
mon_script ......

Mais je viens d'essayer /sw/bin/mksh -vx mon_script
et ça marche.

J'ai donc un soucis avec /bin/ksh, et pas avec le mirbsdksh installé
avec Fink

?????


Ok.

Bon, alors en fait je croyais bien lancer le ksh de Mac OS X, mais c'était
bash. Et j'ai vérifié, le ksh de Mac OS X est buggé dans sa gestion de la
fonction read :

echo toto | read x
echo $x

Devrait afficher "toto", mais n'affiche rien. C'est le problème des
fonctions buildin utilisées avec une redirection : ça devrait marcher mais
des limites d'implémentation font que cela ne marche pas dans telle ou telle
version. Le ksh original (pas celui de Mac OS X) lui marche sans problème
bien sûr vu que le code ci-dessus est un classique du genre depuis 30 ans
(depuis Bourne).

Je te conseille d'utiliser un shell type bash (même si ksh est normalement
la norme Posix).

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
olivier.marti
Nicolas Michel wrote:

Olivier Marti wrote:
Je souhaite travailler sur une liste de répertoires, avec un script ksh
du genre :
[snip]


Au fait pourquoi utiliser du ksh et pas du bash ou du sh ?


Ici nous avons une base installée en ksh de scripts pour faire des
simulations climatiques. C'est un choix qui date peut-être un peu, mais
c'est comme ça ! Beaucoup de compétence la dessus chez nous. Donc
j'utilise aussi ksh pour mes bricoles sur le Mac.

Mais nous n'avons jamais de nom de fichiers avec des blancs sur nos
calculateurs. Et le spécialiste ksh est en vacances ces jours ci ....

Olivier


Avatar
olivier.marti
Eric Levenez wrote:

Le 23/05/07 8:15, dans <1hyk3ze.1a7ilomkehrxkN%,

Je poste très exactement ce qui s'affiche quand je fait ksh -vx
mon_script ......

Mais je viens d'essayer /sw/bin/mksh -vx mon_script
et ça marche.

J'ai donc un soucis avec /bin/ksh, et pas avec le mirbsdksh installé
avec Fink

?????


Ok.

Bon, alors en fait je croyais bien lancer le ksh de Mac OS X, mais c'était
bash. Et j'ai vérifié, le ksh de Mac OS X est buggé dans sa gestion de la
fonction read :

echo toto | read x
echo $x

Devrait afficher "toto", mais n'affiche rien. C'est le problème des
fonctions buildin utilisées avec une redirection : ça devrait marcher mais
des limites d'implémentation font que cela ne marche pas dans telle ou telle
version. Le ksh original (pas celui de Mac OS X) lui marche sans problème
bien sûr vu que le code ci-dessus est un classique du genre depuis 30 ans
(depuis Bourne).

Je te conseille d'utiliser un shell type bash (même si ksh est normalement
la norme Posix).



Effecivement, mon script marche en sh et bash. Et tout ce que tu
racontes me rappelle des explications d'un des spécialistes ksh ici
(mais il est en vacances ...)

Merci à tous

Olivier


Avatar
pmanet
Olivier Marti wrote:

Effecivement, mon script marche en sh et bash. Et tout ce que tu
racontes me rappelle des explications d'un des spécialistes ksh ici


nous autres, béotiens, on est bien content de constater que l'Unix,
c'est vraiment simple comme Bonjour...
--
www.D-L-S.org

Avatar
blanc
Olivier Marti wrote:

Effecivement, mon script marche en sh et bash.


Essaye en zsh. Je crois qu'il gère mieux ce genre de problèmes avec
espaces.

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE

1 2 3 4 5