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

Répondre à