On Fri, Dec 05, 2003 at 01:11:25PM +0100, BRINER Cedric wrote:
> mais le probl�me est que le `for' interpr�te les espaces des artistes:
Faisons une exp�rience:
[EMAIL PROTECTED]:/tmp/tt% mkdir abcd "un repertoire etrange" "truc"
[EMAIL PROTECTED]:/tmp/tt% for i in *; do echo $i; done
abcd
truc
un repertoire etrange
[EMAIL PROTECTED]:/tmp/tt% date > un\ repertoire\ etrange/bla
[EMAIL PROTECTED]:/tmp/tt% date > abcd/t1
[EMAIL PROTECTED]:/tmp/tt% for i in *; do echo $i; for j in "$i"/*; do echo "
$j"; wc -c "$j"; done; done
abcd
abcd/t1
29 abcd/t1
truc
truc/*
wc: truc/*: No such file or directory
un repertoire etrange
un repertoire etrange/bla
29 un repertoire etrange/bla
La variable i est bien correctement assign�e. Et le reste fonctionne
aussi, tant qu'on utilise des guillemets.
Ton probl�me est la boucle for interne. Mais il y a deux contraintes
incompatibles:
- il faut �viter l'interpr�tation des espaces
- il faut �tendre les jokers *
J'aurais �crit ton script ainsi:
for artist in /mp3/*
do
for album in "$artist"/*
do
./script "$artist $album"
done
done
Mais il est clair qu'on arrive aussi aux limites du shell. Le langage
Perl offre des fonctions s�curis�es -- en particulier l'open() � 3
arguments (handle, mode, nom).
Sinon on peut aussi utiliser les options -0 ou print0 de diverses
commandes comme find, xargs, grep, etc, qui terminent les noms de
fichiers par des ASCII 0 (NUL) plut�t qu'avec des s�parateurs.
find /mp3 -type f -print0 | xargs -0 -n1 ./script
> simplement une variable du bash qui gere ca?
Il y a bien l'Input Field Separator (IFS), mais je ne jouerais pas
avec �a.
_______________________________________________
gull mailing list
[EMAIL PROTECTED]
http://lists.alphanet.ch/mailman/listinfo/gull