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]'