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