adicionando texto ao nome do arquivo antes da extensão

20

Gostaria de adicionar texto ao final do nome do arquivo, mas antes da extensão. Agora estou tentando,

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

a saída é

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

Eu quero que seja,

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
    
por Sam007 26.11.2012 / 21:59

5 respostas

22

Usando expansão do parâmetro POSIX padrão :

for f in *.shp; do printf '%s\n' "${f%.shp}_poly.shp"; done
    
por 26.11.2012 / 22:02
6

Às vezes, há uma ferramenta chamada "renomear" instalada.

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

Pode não ser portátil, mas é fácil de usar.

    
por 27.11.2012 / 22:09
4

Use isto:

for file in *.shp; do echo $(basename $file .shp)_poly.shp; done
    
por 26.11.2012 / 22:05
2

Isso funcionou melhor para mim:

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

    
por 16.11.2016 / 23:35
0

Se eles estiverem em locais diferentes, execute: -

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