Re: question sur 'sed' et 'tr', donc pas trop debian !
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
Reply to: