rename 是什么
批量重命名存在两套完全不同的实现:一套是简单字符串替换版,另一套是正则表达式版,前者常见于 RHEL 系,后者常见于 Debian 系。执行任何批量改名之前都要先预演,因为改名基本不可逆。
基本信息
| 用途 | 批量重命名文件 |
|---|---|
| 两种实现 | 字符串替换版与正则版 |
| 差异 | 语法完全不同,误用会全部失败或改错 |
| 安全做法 | 先预演再执行 |
典型使用场景
- 统一扩展名:把写法或大小写不一致的后缀改成统一形式
- 批量加前缀:给一批导入文件加上来源标识
- 批量去后缀:移除备份文件的多余后缀
- 整理命名规范:把空格或特殊字符替换成连字符
- 保留可逆性:改名前后各留一份清单便于回退
字符串替换版
字符串替换版
rename .jpeg .jpg *.jpeg
rename -v .bak '' *.bak # 删除后缀
rename -n .log .log.old *.log # 预演,不实际执行正则版
正则版
rename -n 's/.jpeg$/.jpg/' * # 先预演
rename 's/IMG_/photo-/' IMG_*.jpg
rename 'y/A-Z/a-z/' * # 转小写两版对照
| 对比项 | 字符串替换版 | 正则版 |
|---|---|---|
| 语法 | 旧串 新串 文件列表 | 表达式 文件列表 |
| 能力 | 只做字面替换 | 支持替换与字符转换 |
| 常见发行版 | RHEL 系多为该实现 | Debian 系多为该实现 |
| 预演 | 有对应选项 | 有对应选项 |
| 输出过程 | 有详细选项 | 有详细选项 |
在 Debian 系上写字符串替换版语法会全部失败,动手前先用版本信息或手册确认实现。
正则版默认直接执行且改名不可逆,务必先加预演选项并逐条核对命中的新旧名字。
批量改名前后都应保留文件清单,出现同名覆盖或错改时才有依据回退。
改名与移动是两件事:只改名字用改名命令,需要同时换目录时用移动命令,混用容易产生意料外的路径。
扩展名大小写不一致时先用预演列出命中清单,再决定是否统一转换。