Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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:

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 !


Je vais dire certainement une grosse bêtise, mais ça :

for DIR in "${LISTE}"

ça ne suffirait pas ? (pas testé, j'avoue)

--
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
Laurent Pertois wrote:

Olivier Marti wrote:

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 !


Je vais dire certainement une grosse bêtise, mais ça :


Oui ;-)


for DIR in "${LISTE}"

ça ne suffirait pas ? (pas testé, j'avoue)


Il prend tout LISTE pour un seul mot. Il ne découpe plus du tout ... !!!

Olivier


Avatar
Eric Levenez
Le 22/05/07 15:39, dans <1hyitvv.143aqhi1iu7rm9N%,
« Olivier Marti » a écrit :

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"
...

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

Avatar
laurent.pertois
Olivier Marti wrote:

ça ne suffirait pas ? (pas testé, j'avoue)


Il prend tout LISTE pour un seul mot. Il ne découpe plus du tout ... !!!


Ah ben voilà, ça m'apprendra à ne pas tester :-D

Désolé, je débute...

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


Avatar
patpro ~ patrick proniewski
In article <1hyj35k.1pggsu11lf0nkxN%,
(Laurent Pertois) wrote:

Olivier Marti wrote:

ça ne suffirait pas ? (pas testé, j'avoue)


Il prend tout LISTE pour un seul mot. Il ne découpe plus du tout ... !!!


Ah ben voilà, ça m'apprendra à ne pas tester :-D

Désolé, je débute...


a mon avis, le plus simple c'est --exec dans le find.

patpro

--
http://www.patpro.net/



Avatar
patpro ~ patrick proniewski
In article <C278EC07.A872B%,
Eric Levenez wrote:

Je ferais un truc du genre :

find . -type d -print | while read DIR
do
cd "$DIR"
...


ha ho, bien vu, m'apprendra à réfléchir ça.

patpro

--
http://www.patpro.net/

Avatar
laurent.pertois
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

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

Avatar
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...

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


Avatar
olivier.marti
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 ?

Olivier


Avatar
olivier.marti
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"
...


Il ne se passe rien :

#!/bin/ksh
find . -type d -print | while read DIR
do
echo "$DIR"
cd "${DIR}"
pwd
done
+ read DIR
+ find . -type d -print


Comprend pas ... J'ai fait quelques essais avec des parenthèses, des
redirections, etc ... Rien ne marche !!! (même avec des répertoires
blanc dans le nom).

Bon, "Unix dans sa coquille de noix" est resté au boulot ....

Olivier


1 2 3 4 5