来源:小源 | 发布日期:2026-04-03
Linux 批量重命名指南
日常运维中批量重命名是高频操作。
mv逐一修改几十上百个文件效率极低,而rename(Perl 版)支持正则表达式,一行命令即可批量处理任意数量文件,效率提升百倍。
两个 rename 的区别
Linux 系统中有两个版本的 rename,用法完全不同:
| 版本 | 语法 | 说明 |
|---|---|---|
| 基础版 rename(默认) | rename 旧字符 新字符 文件名 |
不支持正则,功能简单 |
| 高级版 prename(Perl) | prename '正则规则' 文件名 |
支持 Perl 正则,功能超强 |
安装高级版(CentOS/RHEL):
yum -y install prename
部分 Linux 发行版两个都叫
rename,但高级版支持正则。本文以prename名称区分高级版。
8 个高频应用场景
场景 1:批量替换文件字符
将 .txt 文件名中的 test 替换为 ceshi:
# test1.txt → ceshi1.txt, test-log.txt → ceshi-log.txt
prename 's/test/ceshi/' *.txt
场景 2:批量修改文件后缀
将所有 .log 日志文件备份为 .log.bak:
prename 's/\.log$/.log.bak/' *.log
场景 3:批量添加前缀 / 后缀
给所有图片文件名加上 bak_ 前缀:
# 1.jpg → bak_1.jpg, 2.png → bak_2.png
prename 's/^/bak_/' *.{jpg,png}
场景 4:批量删除多余字符
删除所有文件名中的 _tmp 临时标识:
prename 's/_tmp//' *
# 如需先预览,加 -n 参数
prename -n 's/_tmp//' *
场景 5:批量按数字序号重命名
将杂乱图片统一命名为 img_001.jpg、img_002.jpg...:
prename 's/.*/sprintf("img_%03d.jpg", $::i++)/e' *.jpg
%03d表示 3 位数字不足补 0,可自定义位数和前缀。
场景 6:批量大小写转换
大写文件名转小写:
prename 'y/A-Z/a-z/' *
小写转大写:
prename 'y/a-z/A-Z/' *
场景 7:批量删除指定后缀
清理所有 .tmp 临时后缀:
prename 's/\.tmp$//' *.tmp
场景 8:批量替换特殊字符
文件名中的空格、横杠统一改为下划线,避免命令报错:
# 替换空格:my file.txt → my_file.txt
prename 's/ /_/g' *.txt
# 替换横杠:test-file.log → test_file.log
prename 's/-/_/g' *.log
先预览,再执行
批量改文件最怕改错,加 -n 参数预览效果,确认无误再执行:
# 只预览,不实际修改
prename -n 's/test/ceshi/' *.txt
终端会显示修改前后的文件名对比,没问题再去掉 -n 执行。
与 mv 的差异对比
| 操作 | mv 命令 | prename |
|---|---|---|
| 单个重命名 | ✅ 支持 | ✅ 支持 |
| 批量修改 | 需写循环脚本,复杂 | 1 行命令,无需脚本 |
| 正则匹配 | ❌ 不支持 | ✅ 完美支持 |
| 批量序号 | ❌ 极其麻烦 | ✅ 一键生成 |
| 效率与易用性 | 低,易出错 | ✅ 高,零失误 |
实用技巧
- 操作前务必用
-n预览,避免文件改名错误无法恢复 - 处理重要文件前建议先备份,防止误操作
- 正则中的
.、$、^属于特殊字符,需要加\转义 - 支持通配符
*、?、{},精准匹配要修改的文件
高频命令速查清单
# 1. 批量替换字符(test→ceshi,仅 txt 文件)
prename 's/test/ceshi/' *.txt
# 2. 批量修改后缀(log→log.bak)
prename 's/\.log$/.log.bak/' *.log
# 3. 批量加前缀(bak_)
prename 's/^/bak_/' *.{jpg,png,txt}
# 4. 批量删多余字符(删除 _tmp)
prename 's/_tmp//' *
# 5. 批量按序号命名(img_001.jpg 格式)
prename 's/.*/sprintf("img_%03d.jpg", $::i++)/e' *.jpg
# 6. 大小写转换(大写→小写)
prename 'y/A-Z/a-z/' *
# 7. 批量删后缀(删除 .tmp)
prename 's/\.tmp$//' *.tmp
# 8. 替换特殊字符(空格→下划线)
prename 's/ /_/g' *
# 9. 预览修改效果(不实际执行)
prename -n '替换规则' 文件名
关联链接
- linux-essential-commands-reference — Linux 命令综合参考
- linux-mass-file-deletion-guide — Linux 海量文件删除指南(批量文件操作姐妹篇)
- ops-automation-scripts — 运维自动化脚本