返回首页

Linux 批量重命名指南 — rename/prename 8 大场景实战

📅 创建于 2026-05-28 🔄 更新于 2026-05-28 📝 375 字

来源:小源 | 发布日期: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.jpgimg_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 行命令,无需脚本
正则匹配 ❌ 不支持 ✅ 完美支持
批量序号 ❌ 极其麻烦 ✅ 一键生成
效率与易用性 低,易出错 ✅ 高,零失误

实用技巧

  1. 操作前务必用 -n 预览,避免文件改名错误无法恢复
  2. 处理重要文件前建议先备份,防止误操作
  3. 正则中的 .$^ 属于特殊字符,需要加 \ 转义
  4. 支持通配符 *?{},精准匹配要修改的文件

高频命令速查清单

# 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 '替换规则' 文件名

关联链接