On Mon, 24 Jan 2000, St�phane BERDIN wrote: > Salut, > > J'aimerai renommer tous les fichiers d'un r�p�rtoire, en fait, remplacer > tous les " " par des "_". > > voil� ce que je fais : for i in `find *` ; do mv $i `echo $i|tr " " "_"`; > done
Sans �tre tout � fait s�r : for i in `find *` ; do new_name=`echo "$i" | tr " " "_"` ; mv -- "$i" "$new_name"; done > je me prends une erreur qui est : > > "lors du d�placement de plusieurs fichiers, le dernier param�tres doit �tre > un r�pertoire." > "mv --help pour + d'infos" > > une id�e ? Ca vient du fait que tu as des espaces dans $i. si i="a b", mv $i `echo $i|tr " " "_"` devient mv a b a_b au lieu de mv "a b" a_b Au lieu de ma version pr�c�dente, tu peux aussi faire : for i in `find *` ; do mv "$i" `echo $i|tr " " "_"`; done A condition que tu n'aies pas deux espaces � la suite dans ton nom de fichier, �a suffit (mais ici "a b" sera transform� en "a_b") Le "--" apr�s mv ne sert que si tu as des noms de fichiers commen�ant par "-". > Autre question : y a un frontend pour 'sed' ou/et 'tr' ? Un frontend ? Que veux-tu dire ? Emacs � la fonction query-replace-regexp qui permet de confirmer chaque remplacement si c'est �a que tu cherches. Vincent PS: Ton find avec for ne marche pas chez moi : il s�pare les noms chaque fois qu'il y a un espace (ce qui est normal). Avec les fichiers "a b" et "c", j'ai : ~$ for i in `find *` ; do echo "$i"; done a b c Il faut mieux : ~$ find * | while read i ; do echo "$i" ; done a b c

