Bonjour à tous,

voilà mon souci :

dans le cadre d'un problème que l'on m'a soumis, je cherche une solution pour renommer récursivement des noms de fichiers.
Habituellement, j'utilise cette commande (ou dérivé) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
for i in `find . -name "*.txt"`
       do mv $i `echo $i | sed "/txt/s//doc/"`
done
Seulement, cette fois-ci, je suis confronté à des noms de fichiers comportant des espaces... et la commande "find" ne réagie pas du tout de la même façon.
Elle m'affiche 2 occurences à cause d'un retour à la ligne lorsqu'elle rencontre l'espace.

Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
for i in `find . -name "*.txt"`
        do mv $i `echo $i | sed "/txt/s//doc/"`
done
résultat :

mv: ne peut évaluer `./test': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `01.txt': Aucun fichier ou répertoire de ce type


comment faire comprendre à "find" que c'est un seul et même fichier qu'il faut traiter ? j'ai parcouru le man mais, je l'avoue, sans grand résultat...

Autre chose, en dehors d'une boucle "for", le résultat du "find" est correct...

./test 01.txt

avec une boucle "for" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
for i in `find . -name "*.txt"`
do echo $i
done
résultat :

./test
01.txt


Quelqu'un peut-il éclairer ma lanterne ?