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


Répondre à