Samuel Thibault a �crit, le mardi 30 novembre 2004 � 07:02:05 :
> Le mar 30 nov 2004 à 18:44:33 +0100, S�bastien Hinderer a tapoté sur son 
> clavier :
> > > for i in *.wav.mp3; do mv $i ${i%%\.wav.mp3}.mp3; done
> > 
> > for i in *.wav.mp3; do mv $i `basename $i .wav.mp3`.mp3; done
> 
> Allez, pour la route:
> 
> for i in *.wav.mp3; do mv "$i" "${i/%.wav.mp3/.mp3}" ; done
> 
> Les " c'est pour le cas o� les fichiers ont des espaces. Sous bash, le
> "for" ne marche d�j� pas avec les espaces. Mais sous zsh �a marche.
ls | while read i;do mv "$i" "`basename "$i" .wav.mp3`".mp3; done
marche sous bash.

Vous pouvez remarquer ici qu'on peut prot�ger les espaces dans le
r�sultat d'une substitution avec des guillemets. Le caract�re ` n'est
donc pas prot�g� par les guillemets.
Aussi on n'est m�me pas oblig� d'�chapper les guillemets � l'int�rieur
de la substitution, qui est pourtant elle-m�me entre guillemets, bash
est assez intelligent pour comprendre qu'on finit notre substitution
avant de fermer les guillemets.

Autre chose, un 
commande | while read i
va lire les valeurs en utilisant le saut de ligne comme s�parateur et
non l'espace, contrairement au
for i in ...
qui lui n'a AUCUNE protection contre les espaces.
ATTENTION : le | while read ... ne marche pas � tous les coups, vous
ne pouvez pas ex�cuter une commande qui lit sur l'entr�e standard dans
la boucle, �a fera n'importe quoi.

Si je vous ai perdu, relisez donc cette explication et comprenez
d'apr�s l'exemple. Ce sont les subtilit�s de bash, un peu gal�re mais
bon �a marche au final, enfin... dans la plupart des cas!

Pascal 
_______________________________________________
Liste de diffusion CarrefourBLinuX 
    [EMAIL PROTECTED]
    http://lists.freearchive.org/mailman/listinfo/carrefourblinux
Signets : http://fr.groups.yahoo.com/group/carrefourblinux/links/
Archives : http://lists.freearchive.org/pipermail//carrefourblinux
Anciennes archives (Yahoogroupes) :
    http://fr.groups.yahoo.com/group/carrefourblinux/messages
Pour s'inscire par courriel : 
    'mailto:[EMAIL PROTECTED]'
Pour se desinscrire par courriel : 
    'mailto:[EMAIL PROTECTED]'

Répondre à