OVH Cloud OVH Cloud

Bash et les espaces

3 réponses
Avatar
Tieum
    Bonjour,

Je reposte ce message déjà publié sur fr.comp.os.linux.configuration ici car
on m'a dit que celà était plus approprié.

Je souhaite effectuer une action sur un répertoire et certains de ces
sous-répertoires. Pour récupérer la liste des sous répertoires, 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

3 réponses

Avatar
Charles Plessy
Tieum wrote:
Bonjour,

Je reposte ce message déjà publié sur fr.comp.os.linux.configuration ici car
on m'a dit que celà était plus approprié.

Je souhaite effectuer une action sur un répertoire et certains de ces
sous-répertoires. Pour récupérer la liste des sous répertoires


find . -type d

SI j'ai un répertoire qui s'appelle "A B"


l'option -print0 de find t'intéressera sûrement, en conjonction avec
xargs -0

--
Charles

Avatar
Stephane Chazelas
2004-12-11, 14:31(+01), Tieum:
[...]
ls -1 -F $1 | grep / | grep -v zz_ | sed -e "s////g" | sed -e "s/ / /g"



Tu veux la liste des repertoires dans "$1".

find "$1"/. ! -name . -prune ! -name '*zz_*' -print

Et si tu veux faire quelquechose avec:

find "$1"/. ! -name . -prune ! -name '*zz_*'
-exec printf 'Fichier: "%s"n' {} ;


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


C'est malin, qu'est-ce que tu vas faire avec ce .


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


Eh, eh, la blague connue du `...` qui mange les . Utilise
$(...) a la place.


et que j'utilise my_var dans une command

ls $my_var


C'est la que tu te trompes (voir un thread recent dans ce
groupe).

Il faut utiliser:

IFS='
'
set -f

ls -- $my_var

Et ne pas t'embeter avec ces backslashes qui ne serviront a
rien de toutes facons (ls ne sait que faire de ces backslashes,
le shell non plus quand ils sont dans une variable).

--
Stephane

Avatar
Tieum
Charles Plessy wrote:

Tieum wrote:
Bonjour,

Je reposte ce message déjà publié sur fr.comp.os.linux.configuration ici
car on m'a dit que celà était plus approprié.

Je souhaite effectuer une action sur un répertoire et certains de ces
sous-répertoires. Pour récupérer la liste des sous répertoires


find . -type d

SI j'ai un répertoire qui s'appelle "A B"


l'option -print0 de find t'intéressera sûrement, en conjonction avec
xargs -0



Merci c'est exactement ce qu'il me fallait, ca mùarche du tonnerre !

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