Я хотел бы добавить текст в конец имени файла, но перед расширением. Сейчас я пытаюсь,
for f in *.shp; do echo $f_poly; done
выход есть,
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
Я хочу, чтобы это было,
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
форматную строку вместо менее переносимойecho
. 2. Я использую расширение параметров, которое более эффективно, чем вызов внешнего двоичного кода (basename
) для такой простой задачи.for f in *.shp; do mv $f ${f%.shp}_poly.shp; done
Иногда установлен инструмент под названием «переименовать».
Он может быть не портативным, но простым в использовании.
источник
Использовать этот:
источник
basename
медленнее и менее эффективно, чем позволить оболочке выполнять работу самостоятельно. Это может быть заметно для очень большого количества файлов.--
s, и он не работает для имен файлов, которые имеют символы новой строки перед.shp
.Это работало лучше для меня:
for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done
источник
for f in *.webm
, вы забыли процитировать${f}
и вы пропустили--
.echo
), но не требуемое.Если они находятся в разных местах, выполните:
источник
Поскольку вопрос в том,
bash
что нет необходимости во внешних утилитах, так как вы можете использовать регулярные выражения bash :источник