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é) :
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.
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
Elle m'affiche 2 occurences à cause d'un retour à la ligne lorsqu'elle rencontre l'espace.
Exemple :
résultat :
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
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part find . -name "*.txt"
avec une boucle "for" :
résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for i in `find . -name "*.txt"` do echo $i done
./test
01.txt
Quelqu'un peut-il éclairer ma lanterne ?![]()
Partager