J'ai compris
find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \;
./0/0.png.andnav renamed as ./0/0.png.tile
./0/1.png.andnav renamed as ./0/1.png.tile
./1/0.png.andnav renamed as ./1/0.png.tile
./1/1.png.andnav renamed as ./1/1.png.tile
bien sûr, supprimez le -v lorsque vous le faites réellement, sinon cela fera perdre du temps à afficher tous les fichiers
Avec zsh :
autoload zmv
zmv -n '(**/)(*).andnav' '$1$2.tile'
Supprimer le -n
pour effectuer réellement le changement de nom.
Quelque chose comme :
find . -name '*.andnav' -exec sh -c 'mv "$0" "${0%.andnav}.tile"' {} \;
Explication
Ce qui précède commence à parcourir l'arborescence des répertoires à partir du répertoire de travail actuel (.
). Chaque fois qu'un nom de fichier correspond au modèle *.andnav
(par exemple, foo.andnav
) la commande suivante est exécutée :
sh -c 'mv "$0" "${0%.andnav}.tile"' foo.andnav
Où $0
est foo.andnav
et ${0%.andnav}.tile
remplace le .andnav
suffixe avec .tile
donc en gros :
mv foo.andnav foo.tile