You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash循环批量重命名文件:替换heat_1为heat_21且保留扩展名

解决Bash文件名替换时意外丢失扩展名的问题

问题场景

需要将以下四个文件名中的heat_1替换为heat_21:

  • 5JUP_N2_UUCGCU_heat_1.out
  • 5JUP_N2_UUCGCU_heat_1.rst
  • mdcrd_heat_1
  • mdinfo_heat_1

原脚本执行后.out和.rst扩展名被意外移除,原因有两个:

  1. ${i/heat_*/heat_21}中的heat_*是贪婪匹配,会把heat_1及其后面的所有字符(包括扩展名)全部替换成heat_21
  2. 循环写法for i in ls *存在语法错误,会把字符串"ls"和"*"当作循环对象,而非遍历当前目录下的所有文件

正确脚本写法

for i in *; do
  mv "$i" "${i/heat_1/heat_21}"
done

说明

  • 用heat_1精确匹配目标子串,只会替换文件名中第一次出现的heat_1为heat_21,不会影响后续的扩展名或其他字符
  • 如果需要全局替换文件名中所有的heat_1(单文件名中一般不会重复),可以将替换语法改为${i//heat_1/heat_21}(双斜杠表示全局替换)
  • 循环写法for i in *会正确遍历当前目录下的所有文件,解决原脚本的语法问题

内容的提问来源于stack exchange,提问作者Pete Hwang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:19:58