Incompréhension avec la commande "find"
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:
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:
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...
Code:
find . -name "*.txt"
./test 01.txt
avec une boucle "for" :
Code:
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 ? :mrgreen: