Le 22/05/07 22:14, dans <1hyjbna.1ffojv7256uo0N%, « Olivier Marti » a écrit :
Il ne se passe rien :
Si, il se passe quelque chose, mais seulement une fois
#!/bin/ksh find . -type d -print | while read DIR do echo "$DIR" cd "${DIR}" pwd
Pour revenir au bon endroit (pour le cd de la boucle suivante) :
cd -
Sinon au lieu d'un "find ." tu peux faire un "find /xxx" pour avoir des chemins absolus.
L'autre solution, proposée par FiLH est de créer un sous-shell par (...).
done
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
filh
Eric Levenez wrote:
Le 22/05/07 22:04, dans <1hyjasy.1ojaqrpvvxvwuN%, « FiLH »
Eric Levenez wrote:
Le 22/05/07 15:39, dans <1hyitvv.143aqhi1iu7rm9N%,
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 ?
Je ferais un truc du genre :
find . -type d -print | while read DIR do cd "$DIR" ...
Je ferais du genre do (cd "*DIR" ....
) Histoire de revenir au répertoire de départ avant le prochain cd...
Si ce n'est que cela,
Ben sinon ça aura juste un peu de mal à marcher hein :)
il suffit de faire un "cd -" à la fin de la boucle.
Cela est plus rapide et évite de lancer un sous-shell.
À condition qu'il n'y ait pas d'autre cd de caché... Même si le sous shell a d'autres inconvénenients.
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Roland Barthes. http://www.filh.org
Eric Levenez <news@levenez.com> wrote:
Le 22/05/07 22:04, dans <1hyjasy.1ojaqrpvvxvwuN%filh@filh.orgie>, « FiLH »
Eric Levenez <news@levenez.com> wrote:
Le 22/05/07 15:39, dans <1hyitvv.143aqhi1iu7rm9N%olivier.marti@ensta.org>,
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 ?
Je ferais un truc du genre :
find . -type d -print | while read DIR
do
cd "$DIR"
...
Je ferais du genre
do
(cd "*DIR"
....
)
Histoire de revenir au répertoire de départ avant le prochain cd...
Si ce n'est que cela,
Ben sinon ça aura juste un peu de mal à marcher hein :)
il suffit de faire un "cd -" à la fin de la boucle.
Cela est plus rapide et évite de lancer un sous-shell.
À condition qu'il n'y ait pas d'autre cd de caché...
Même si le sous shell a d'autres inconvénenients.
FiLH
--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Roland Barthes.
http://www.filh.org
Le 22/05/07 22:04, dans <1hyjasy.1ojaqrpvvxvwuN%, « FiLH »
Eric Levenez wrote:
Le 22/05/07 15:39, dans <1hyitvv.143aqhi1iu7rm9N%,
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 ?
Je ferais un truc du genre :
find . -type d -print | while read DIR do cd "$DIR" ...
Je ferais du genre do (cd "*DIR" ....
) Histoire de revenir au répertoire de départ avant le prochain cd...
Si ce n'est que cela,
Ben sinon ça aura juste un peu de mal à marcher hein :)
il suffit de faire un "cd -" à la fin de la boucle.
Cela est plus rapide et évite de lancer un sous-shell.
À condition qu'il n'y ait pas d'autre cd de caché... Même si le sous shell a d'autres inconvénenients.
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Roland Barthes. http://www.filh.org
filh
Olivier Marti wrote:
Laurent Pertois wrote:
patpro ~ patrick proniewski wrote:
a mon avis, le plus simple c'est --exec dans le find.
Ca, j'y ai bien pensé en voyant ce que proposait Èric mais comme je me suis gaufré une fois, je me le suis gardé :-D
--exec c'est pour faire une commande simple derrière, type rm, file, etc ... Mais si on a beaucoup de choses à faire derrière ?
Tout dépend : parfois on peut quasiment faire un shell script kivabien :)
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Roland Barthes. http://www.filh.org
patpro ~ patrick proniewski <patpro@boleskine.patpro.net> wrote:
a mon avis, le plus simple c'est --exec dans le find.
Ca, j'y ai bien pensé en voyant ce que proposait Èric mais comme je me
suis gaufré une fois, je me le suis gardé :-D
--exec c'est pour faire une commande simple derrière, type rm, file, etc
... Mais si on a beaucoup de choses à faire derrière ?
Tout dépend : parfois on peut quasiment faire un shell script kivabien
:)
FiLH
--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Roland Barthes.
http://www.filh.org
a mon avis, le plus simple c'est --exec dans le find.
Ca, j'y ai bien pensé en voyant ce que proposait Èric mais comme je me suis gaufré une fois, je me le suis gardé :-D
--exec c'est pour faire une commande simple derrière, type rm, file, etc ... Mais si on a beaucoup de choses à faire derrière ?
Tout dépend : parfois on peut quasiment faire un shell script kivabien :)
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Roland Barthes. http://www.filh.org
Eric Levenez
Le 22/05/07 22:33, dans , « Erwan David » a écrit :
Eric Levenez écrivait :
Le 22/05/07 22:14, dans <1hyjbna.1ffojv7256uo0N%, « Olivier Marti » a écrit :
Il ne se passe rien :
Si, il se passe quelque chose, mais seulement une fois
#!/bin/ksh find . -type d -print | while read DIR do echo "$DIR" cd "${DIR}" pwd
Pour revenir au bon endroit (pour le cd de la boucle suivante) :
cd -
Utiliser plutôt pushd et popd. pushd est un cd qui mémoris en plus l'emplacement courant, popd annule le dernier pushd.
Sauf que ksh n'a pas ces extensions (du GNU je crois).
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 22/05/07 22:33, dans <m2ps4svbsn.fsf@rail.eu.org>, « Erwan David »
<erwan@rail.eu.org> a écrit :
Eric Levenez <news@levenez.com> écrivait :
Le 22/05/07 22:14, dans <1hyjbna.1ffojv7256uo0N%olivier.marti@ensta.org>,
« Olivier Marti » <olivier.marti@ensta.org> a écrit :
Il ne se passe rien :
Si, il se passe quelque chose, mais seulement une fois
#!/bin/ksh
find . -type d -print | while read DIR
do
echo "$DIR"
cd "${DIR}"
pwd
Pour revenir au bon endroit (pour le cd de la boucle suivante) :
cd -
Utiliser plutôt pushd et popd.
pushd est un cd qui mémoris en plus l'emplacement courant, popd annule
le dernier pushd.
Sauf que ksh n'a pas ces extensions (du GNU je crois).
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.