Ce qui suit est une solution directe de votre approche:
find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}_renamed"' \;
Cependant, cela coûte très cher si vous avez beaucoup de fichiers correspondants, car vous démarrez un nouveau shell (qui exécute a mv) pour chaque correspondance. Et si vous avez des personnages amusants dans n'importe quel nom de fichier, cela va exploser. Une approche plus efficace et sécurisée est la suivante:
find . -type f -name 'file*' -print0 | xargs --null -I{} mv {} {}_renamed
Il a également l'avantage de travailler avec des fichiers étrangement nommés. Si le findsupporte, cela peut être réduit à
find . -type f -name 'file*' -exec mv {} {}_renamed \;
La xargsversion est utile lorsque vous n'utilisez pas {}, comme dans
find .... -print0 | xargs --null rm
Ici, rmon appelle une fois (ou plusieurs fois avec plusieurs fichiers), mais pas pour tous les fichiers.
J'ai enlevé la basenamequestion en vous, parce que c'est probablement faux: vous iriez foo/bar/file8à file8_renamed, pas foo/bar/file8_renamed.
Modifications (comme suggéré dans les commentaires):
- Ajouté raccourci findsansxargs
- Ajout de la vignette de sécurité
 
              
xest inutile: lesfind . -type f -name 'file*' -exec mv {} "{}_renamed" \;xargsversions ont la même efficacité que le premier exemple /