用for循环配合mv和Bash参数扩展可安全批量重命名:${file#prefix}精准删前缀,"new_${file#old_}"替换前缀,通配符限定类型如old_*.jpg,加[ -n "$file" ]防无匹配错误,echo预览命令再执行。

直接用终端命令批量重命名带特定前缀的文件,关键在于“精准匹配 + 安全替换”。不需要装额外工具,系统自带的 for 循环配合 mv 就能稳稳搞定,尤其适合处理像 old_report_*.pdf、draft_*.docx 这类有统一开头的文件。
匹配并移除指定前缀(例如删掉 “draft_”)
假设当前目录下所有文件都以 draft_ 开头,你想把它们全部改成不带这个前缀的名字:
- 先确认有哪些文件:
ls draft_* - 执行重命名:
for file in draft_*; do mv "$file" "${file#draft_}"; done
说明:${file#draft_} 是 Bash/Zsh 的参数扩展语法,表示“从左边去掉第一个匹配的 draft_”,比用 sed 更轻量、更可靠。
匹配并替换成新前缀(例如把 “old_” 换成 “new_”)
如果原文件是 old_config.txt、old_log.json,你想统一改为 new_config.txt、new_log.json:
- 运行命令:
for file in old_*; do mv "$file" "new_${file#old_}"; done
注意:这里用的是 ${file#old_} 去掉旧前缀,再拼上新前缀,避免误改文件名中间或后缀里偶然出现的 “old_”。
只处理特定类型,且保留原扩展名
比如只想改 old_ 开头的图片,且确保 .jpg/.png 不被破坏:
- 命令:
for file in old_*.jpg old_*.png; do [ -n "$file" ] && mv "$file" "final_${file#old_}"; done
[ -n "$file" ] 是防错机制——当没匹配到任何文件时,通配符会原样保留,这行判断能跳过无效执行,避免创建错误文件名。
加个安全预览:先看要怎么改,再动手
不确定效果?加个 echo 预演一遍:
- 输入:
for file in old_*; do echo mv "$file" "new_${file#old_}"; done - 终端会逐行打印出将要执行的 mv 命令,确认无误后再把
echo删掉运行。


















