ajout de text au nom de file avant l'extension

Je voudrais append du text à la fin du nom de file mais avant l'extension. En ce moment, j'essaie,

for f in *.shp; do echo $f_poly; done

la sortie est,

 Quercus_acutifolia.shp_poly Quercus_agrifolia.shp_poly Quercus_corrugata.shp_poly Quercus_cortesii.shp_poly Quercus_costaricensis.shp_poly Quercus_havardii.shp_poly Quercus_hemisphaerica.shp_poly Quercus_kelloggii.shp_poly Quercus_knoblochii.shp_poly Quercus_laceyi.shp_poly 

Je veux que ce soit,

 Quercus_acutifolia_poly.shp Quercus_agrifolia_poly.shp Quercus_corrugata_poly.shp Quercus_cortesii_poly.shp Quercus_costaricensis_poly.shp Quercus_havardii_poly.shp Quercus_hemisphaerica_poly.shp Quercus_kelloggii_poly.shp Quercus_knoblochii_poly.shp Quercus_laceyi_poly.shp 

Utilisation de l'extension de paramètre POSIX standard :

 for f in *.shp; do printf '%s\n' "${f%.shp}_poly.shp"; done 

Parfois, il y a un outil appelé "renommer" installé.

 rename 's/\.shp$/_poly.shp/' *shp 

Il pourrait ne pas être portable, mais il est facile à utiliser.

Utilisez ceci:

 for file in *.shp; do echo $(basename $file .shp)_poly.shp; done 

Cela a mieux fonctionné pour moi:

for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done

S'ils se trouvent dans des endroits différents, exécutez: –

 for i in ` find /root/test/ -name "*.shp" ` ; do mv $i ` echo $i | sed 's/.shp$/_poly.shp/g' ` ; done