L'ho capito
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
ovviamente rimuovi -v quando lo fai effettivamente, o perderai tempo a visualizzare tutti i file
Con zsh:
autoload zmv
zmv -n '(**/)(*).andnav' '$1$2.tile'
Rimuovi -n
per eseguire effettivamente la ridenominazione.
Qualcosa come:
find . -name '*.andnav' -exec sh -c 'mv "$0" "${0%.andnav}.tile"' {} \;
Spiegazione
Quanto sopra inizia a percorrere l'albero delle directory a partire dalla directory di lavoro corrente (.
). Ogni volta che un nome file corrisponde al pattern *.andnav
(ad es., foo.andnav
) viene eseguito il seguente comando:
sh -c 'mv "$0" "${0%.andnav}.tile"' foo.andnav
Dove $0
è foo.andnav
e ${0%.andnav}.tile
sostituisce il .andnav
suffisso con .tile
quindi sostanzialmente:
mv foo.andnav foo.tile