On lun, jan 24, 2000 at 06:14:58 +0100, 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
> 
> 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 ?

Plusieurs choses :

- dans `find *`, * est remplac� (par le shell) par la liste de tous les
fichiers du r�pertoire courant. Ta boucle est donc �quivalente � :
"for i in *". Il faut utiliser par exemple `find . -type f` si tu ne
veux que les fichiers de tous les sous-r�pertoires du r�pertoire
courant.

- for i in xxx : l'expression xxx est �valu�e pour attribuer les valeurs
de i, et l'espace est un s�parateur. Donc i ne prendra pas les bonnes
valeurs. Ex :
$ touch "foo bar"
$ for i in *; do echo "Fichier : $i"; done
Fichier : foo
Fichier : bar

Il faut utiliser read :
$ ls | while read i; do echo "Fichier : $i"; done
Fichier : foo bar

En r�sum� :
find . -type f | while read i; do mv "$i" `echo $i | tr ' ' _`; done

Olivier
-- 
A shortcut is the longest distance between two points.

Répondre à