Ich möchte Text am Ende des Dateinamens aber vor der Erweiterung einfügen. Im Moment versuche ich,
for f in *.shp; do echo $f_poly; done
die Ausgabe ist,
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
Ich möchte, dass es so ist,
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
eine Formatzeichenfolge anstelle der weniger portablenecho
. 2. Ich verwende eine Parametererweiterung, die effizienter ist als das Aufrufen einer externen Binärdatei (basename
) für eine so einfache Aufgabe.for f in *.shp; do mv $f ${f%.shp}_poly.shp; done
Manchmal ist ein Tool namens "Umbenennen" installiert.
Es ist möglicherweise nicht portabel, aber einfach zu bedienen.
quelle
Benutze das:
quelle
basename
ist langsamer und weniger effizient, als die Shell die Arbeit alleine erledigen zu lassen. Dies kann bei sehr vielen Dateien auffallen.--
Dateinamen mit Zeilenumbrüchen vor dem.shp
.Das hat bei mir besser funktioniert:
for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done
quelle
for f in *.webm
, vergessen haben, die zu zitieren,${f}
und dass Ihnen eine fehlt--
.echo
) ausgibt , aber nicht den erforderlichen.Wenn sie sich an verschiedenen Orten befinden, führen Sie Folgendes aus:
quelle
Da die Frage ist,
bash
besteht keine Notwendigkeit für externe Dienstprogramme, da Sie verwenden können bash regexps verwenden können :quelle