我想将文本添加到文件名末尾但扩展名之前。现在我正在努力,
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
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