在linux日常运维中,你有没有遇到过批量改文件名的烦恼?下载的日志文件、备份数据,文件名杂乱无章,想用mv一个一个改,几十上百个文件能改到崩溃;想统一加前缀、改后缀、替换字符、按序号命名,手动操作费时又容易出错。
大部分人可能只知道用mv重命名,却忽略了linux 自带的正则批量重命名神器的rename(perl的rename)神器。相比基础的mv,它支持正则表达式,1 行命令就能批量处理任意数量文件,效率提升百倍。
一、两个rename的区别
linux 系统(本文默认指的centos/rhel7,部分linux版本两个都是rename,只是高级支持正则)里有两个版本的rename,用法完全不同:
1.基础版 rename(默认,不需要安装)
2. prename(perl版的rename)
高级版prename支持perl正则,功能超强。
3.高级版rename安装命令
#CentOS/RHEL 安装高级版 yum -y install prename
二、8 个高频应用场景
把所有.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:批量大小写转换
把所有大写文件名改成小写:
场景 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执行。五、实用技巧
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实战