在文件名扩展名之前添加文本

在文件名扩展名之前添加文本

我想将文本添加到文件名末尾但扩展名之前。现在我正在努力,

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

答案1

使用标准 POSIX 参数扩展:

for f in *.shp; do printf '%s\n' "${f%.shp}_poly.shp"; done

答案2

有时会安装一个名为“重命名”的工具。

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

它可能不便于携带,但很容易使用。

答案3

由于问题是bash不需要外部实用程序,因为您可以使用bash 正则表达式:

for f in *.shp
do
    mv -v "${f}" "${f%.*}_MYSUFFIX.${f##*.}"
done

❗️警告for f in *.ext不是可靠,因为它会破坏包含空格、引号或其他保留字符的文件名。一种故障安全方法是使用类似find . -iname '*.shp' -exec sh -c 'mv -v "${1}" "${1%.*}_MYSUFFIX.${f##*.}"' _ {} \;.如果不需要递归遍历则添加-maxdepth 1

答案4

这对我来说效果更好:

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

相关内容