Linux文件重命名核心命令是mv(单文件)和rename(批量),但rename在Ubuntu/Debian(Perl版,支持正则)与CentOS/RHEL(C版,仅字面替换)中实现不同,必须先用rename --version确认版本再选用对应语法,否则易出错。

Linux 给文件重命名,核心就两个命令:mv 和 rename。单个文件用 mv,批量改名必须用 rename —— 混用或只记一个,迟早踩坑。
单个文件重命名必须用 mv
mv 本质是“移动”,但在同一目录下移动,就等于重命名。它不依赖额外工具、所有发行版自带、语法直白。
- 基本写法:
mv old_name.txt new_name.txt—— 注意不是mv -r或其他参数,单文件不需要 - 含空格或特殊字符的文件名,必须加引号:
mv "my file.txt" "new name.txt" - 目标名已存在时,默认直接覆盖(无提示),加
-i可交互确认:mv -i config.bak config.txt - 想留备份?加
-b:mv -b notes.txt notes_final.txt会生成notes_final.txt~
批量重命名只能靠 rename,但版本差异极大
rename 不是单一命令:Ubuntu/Debian 默认是 Perl 版(支持正则),CentOS/RHEL 默认是 util-linux 的 C 版(仅字面替换)。不先看版本,rename 's/old/new/' *.txt 很可能报错或静默失败。
- 查清版本:
rename --version—— 输出含 “Perl” 是 Perl 版;含 “util-linux” 是 C 版 - Perl 版(推荐):支持完整正则,例如
rename 's/^IMG_(\d+)/photo_$1/' IMG_*.jpg,或转小写:rename 'y/A-Z/a-z/' *.JPG - C 版(CentOS 常见):语法是
rename old_string new_string file_list,例如rename .log .out *.log—— 不支持s///或^等正则符号 - 安全第一:加
-n参数预览效果,不真正执行:rename -n 's/draft/final/' *.md
别硬扛:用 for 循环 + mv 是最稳的兼容方案
当 rename 不可用、版本混乱,或逻辑简单(如统一加前缀),for 循环配合 shell 参数扩展比写正则更可靠、更易读、无需依赖外部工具。
- 给所有
.txt加前缀:for f in *.txt; do mv "$f" "backup_$f"; done - 把
.jpg改成.png(保留原名):for f in *.jpg; do mv "$f" "${f%.jpg}.png"; done - 执行前务必先用
echo验证:for f in *.txt; do echo mv "$f" "v2_$f"; done—— 看输出没问题再删掉echo执行 - 注意双引号包裹
"$f",否则文件名含空格会崩
真正容易被忽略的是:不同系统里 rename 根本不是同一个程序,连 man 手册都指向不同实现。与其死记语法,不如养成习惯——每次用前先 rename --version,再决定写 s/// 还是 old new。批量操作没有“一招鲜”,只有“先看版本,再选路子”。


















