Me gustaría agregar texto al final del nombre de archivo pero antes de la extensión. En este momento estoy intentando
for f in *.shp; do echo $f_poly; done
la salida es
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
Quiero que sea
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
printf
con una cadena de formato en lugar de la menos portátilecho
. 2. Utilizo la expansión de parámetros que es más eficiente que llamar a un binario externo (basename
) para una tarea tan simple.for f in *.shp; do mv $f ${f%.shp}_poly.shp; done
A veces hay una herramienta llamada "renombrar" instalada.
Puede que no sea portátil pero es fácil de usar.
fuente
Utilizar esta:
fuente
basename
es más lento y menos eficiente que dejar que el shell haga el trabajo por sí mismo. Esto puede ser notable para un gran número de archivos.--
sy falla para los nombres de archivo que tienen caracteres de nueva línea antes de.shp
.Esto funcionó mejor para mí:
for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done
fuente
for f in *.webm
, olvidaste citar la${f}
y te falta una--
.echo
), pero no el requerido.Si están en diferentes ubicaciones, ejecute: -
fuente
Como la pregunta es,
bash
no hay necesidad de utilidades externas, ya que puede usar bash regexps :fuente