OVH Cloud OVH Cloud

Bash et les espaces

4 réponses
Avatar
Tieum
Bonjour,

Je souhait effectuer une action sur un répertoire et certains de ces
sous-répertoires. Pour récupérer la liste des sous répertoirs, j'utilise :

ls -1 -F $1 | grep / | grep -v zz_ | sed -e "s/\///g" | sed -e "s/ /\\\ /g"

SI j'ai un répertoire qui s'appelle "A B", la commande me renvoie bien
"A\ B"

Lorsque je le mets dans un shell :

my_var=`ls -1 -F $1 | grep / | grep -v zz_ | sed -e "s/\///g" | sed -e
"s/ /\\\ /g"`

et que j'utilise my_var dans une command

ls $my_var

celà est interprêté comme

ls A B

je voudrias

ls A\ B

Comment faire ?

D'avance merci.


--
Matthieu
-----------------------------------------------------------------
Pour m'écrire remplacer surnom par tieum les 2 fois

4 réponses

Avatar
Nicolas George
Tieum wrote in message <41bae7da$0$11642$:
my_var=`ls -1 -F $1 | grep / | grep -v zz_ | sed -e "s////g" | sed -e
"s/ / /g"`


Laisse tomber bash, prends zsh à la place, et écris :

my_var=(*(/))

Si tu veux plus de détails, va sur fr.comp.os.unix, qui est plus adapté à ce
genre de questions.

Avatar
no_spam
On Sat, 11 Dec 2004 13:28:10 +0100, Tieum wrote:

Bonjour,

Je souhait effectuer une action sur un répertoire et certains de ces
sous-répertoires. Pour récupérer la liste des sous répertoirs, j'utilise :

ls -1 -F $1 | grep / | grep -v zz_ | sed -e "s////g" | sed -e "s/ / /g"

SI j'ai un répertoire qui s'appelle "A B", la commande me renvoie bien
"A B"

Lorsque je le mets dans un shell :

my_var=`ls -1 -F $1 | grep / | grep -v zz_ | sed -e "s////g" | sed -e
"s/ / /g"`

et que j'utilise my_var dans une command

ls $my_var

celà est interprêté comme

ls A B

je voudrias

ls A B

Comment faire ?


ls "$my_var"

Avatar
TiChou
Dans le message <news:41bae7da$0$11642$,
*Tieum* tapota sur f.c.o.l.configuration :

Bonjour,


Bonjour,

Je souhait effectuer une action sur un répertoire et certains de ces
sous-répertoires. Pour récupérer la liste des sous répertoirs, j'utilise :

ls -1 -F $1 | grep / | grep -v zz_ | sed -e "s////g" | sed -e "s/ /
/g"


Pour récupérer la liste des sous répertoires d"un répertoire, la commande
suivante ne serait-elle pas plus simple et efficace ?

$ find "$1" -type d -maxdepth 1 ! -name '*zz_*'

ou sans le chemin d'accès et avec GNU find :

$ find "$1" -type d -maxdepth 1 ! -name '*zz_*' -printf '%fn'

SI j'ai un répertoire qui s'appelle "A B", la commande me renvoie bien
"A B"


Est-ce bien utile de vouloir « échapper » les espaces ?

ls $my_var

celà est interprêté comme

ls A B

je voudrias

ls A B

Comment faire ?


Comme il a été dit précédemment par les autres contributeurs, il faut placer
la variable à l'intérieur de doubles quotes ce qui rend alors les espaces
« échappés » inutiles

D'avance merci.


De rien.

--
TiChou

Avatar
Tieum
Merci à tous pour toutes vos bonnes idées. J'utilise la solution à base de
find et xargs qui m'a été proposée sur fr.comp.os.unix.

Effectivement je m'embêtait à vouloir échapper les espaces pour pouvoir
passer les répertoires avec espaces en ligne de commande. Je saurais
qu'avec des guillements ca marche.

Encore merci !


Matthieu