[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: