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

printfcon 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; doneA veces hay una herramienta llamada "renombrar" instalada.
Puede que no sea portátil pero es fácil de usar.
fuente
Utilizar esta:
fuente
basenamees 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}"; donefuente
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,
bashno hay necesidad de utilidades externas, ya que puede usar bash regexps :fuente