当前位置:首页>Linux>别再用 mv 挨个改文件名!Linux 批量重命名神技,1 行命令搞定百个文件

别再用 mv 挨个改文件名!Linux 批量重命名神技,1 行命令搞定百个文件

  • 2026-09-02 23:11:29
别再用 mv 挨个改文件名!Linux 批量重命名神技,1 行命令搞定百个文件

在linux日常运维中,你有没有遇到过批量改文件名的烦恼?下载的日志文件、备份数据,文件名杂乱无章,想用mv一个一个改,几十上百个文件能改到崩溃;想统一加前缀、改后缀、替换字符、按序号命名,手动操作费时又容易出错。

大部分人可能只知道用mv重命名,却忽略了linux 自带的正则批量重命名神器的rename(perl的rename)神器。相比基础的mv,它支持正则表达式,1 行命令就能批量处理任意数量文件,效率提升百倍。

一、两个rename的区别

linux 系统(本文默认指的centos/rhel7,部分linux版本两个都是rename,只是高级支持正则)里有两个版本的rename,用法完全不同:

1.基础版 rename(默认,不需要安装)

语法格式:rename 旧字符 新字符 文件名

2. prename(perl版的rename)

高级版prename支持perl正则,功能超强。

语法格式:prename '正则规则' 文件名

3.高级版rename安装命令

#CentOS/RHEL 安装高级版 yum -y install prename

二、8 个高频应用场景

场景 1:批量替换文件字符
把所有.txt文件名里的test替换成ceshi:
#示例:test1.txt → ceshi1.txt、test-log.txt → ceshi-log.txtprename '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.pngprename 's/^/bak_/' *.{jpg,png}

场景 4:批量删除文件名多余字符

删除所有文件名里的_tmp临时标识:

prename 's/_tmp//' *  #如果需要先预览,加参数-n

场景 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.txtprename 's/ /_/g' *.txt#替换横杠:test-file.log → test_file.logprename 's/-/_/g' *.log
三、先预览,再执行
批量改文件最怕改错,加 - n 参数预览效果,确认无误再执行
#只预览,不实际修改prename -n 's/test/ceshi/' *.txt
终端会显示修改前后的文件名对比,没问题再去掉-n执行。
四、和mv的差异
操作
mv 命令
prename命令
单个重命名
支持
支持
批量修改
需写循环脚本,复杂
1 行命令,无需脚本
正则匹配
不支持
完美支持
批量序号
极其麻烦
一键生成
操作效率
低,易出错
高,零失误

五、实用技巧

1. 操作前务必用-n预览,避免文件改名错误无法恢复;

2. 处理重要文件前,建议先备份,防止误操作;

3. 正则里的.、$、^属于特殊字符,需要加\转义;

4. 支持通配符*、?、{},精准匹配要修改的文件。

六、rename 高频命令速查清单

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

日常运维、文件整理、数据处理中,批量重命名是高频操作,别再用笨拙的mv挨个修改,也不用写繁琐的 shell 循环。掌握 rename 正则用法,不管是几十还是上百个文件,一行命令就能搞定,省时又精准,彻底解放双手。

这个 Linux 实用小技巧,学会就能立刻用上,赶紧收藏实操起来。

#运维#linux运维#linux实战#rename实战

最新文章

随机文章