web-dev-qa-db-fra.com

ajout de texte au nom de fichier avant l'extension

Je voudrais ajouter du texte à la fin du nom de fichier mais avant l'extension. En ce moment j'essaye,

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
29
Sam007

Utilisation de expansion des paramètres POSIX standard :

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

Parfois, un outil appelé "renommer" est installé.

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

Il n'est peut-être pas portable, mais il est facile à utiliser.

7
Chad Clark

Utilisez ceci:

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

Cela a mieux fonctionné pour moi:

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

3
Vinnie James

Comme la question concerne bash, il n'y a pas besoin d'utilitaires externes, car vous pouvez utiliser bash regexps :

for i in *.shp
do
    mv -v "${i}" "${i%.*}_MYSUFFIX.${i##*.}"
done
2
ccpizza

S'ils se trouvent dans des emplacements différents, exécutez: -

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