rename
命令是Linux系统中用于批量重命名文件的实用工具,它通过正则表达式匹配文件名,高效完成重复性操作,下面从基础语法、版本差异、实战案例三方面详细说明:
基础语法与版本区分
rename
命令有两个主流版本,语法完全不同,需先确认系统预装版本:
-
Perl版本(常见于Debian/Ubuntu):
输出包含Perl
字样,语法为:rename 's/原字符串/新字符串/' 文件
-
util-linux版本(常见于CentOS/RHEL):
输出包含util-linux
字样,语法为:rename 原字符串 新字符串 文件
Perl版本详细用法(推荐)
基础替换
# 将所有.txt文件中的"old"替换为"new" rename 's/old/new/' *.txt
结果:file_old.txt
→ file_new.txt
正则表达式进阶
# 在文件名开头添加前缀"2025_" rename 's/^/2025_/' *.jpg # 删除文件名中的数字(\d+ 匹配连续数字) rename 's/\d+//' photo*.png # 将空格替换为下划线(\s 匹配空白字符) rename 's/\s/_/g' * # g表示全局替换
大小写转换
# 所有文件转为小写 rename 'y/A-Z/a-z/' * # 首字母大写(\U 转大写,\E 结束转换) rename 's/\b(\w)/\U$1\E/g' *.txt
条件限制
# 仅修改扩展名为.log的文件(保留原名) rename 's/\.log$/.bak/' *.log
util-linux版本用法
简单替换
# 将"abc"替换为"xyz"(不支持正则) rename abc xyz *.txt
通配符使用
# 在文件名末尾添加".bak" rename "" ".bak" * # 空字符串表示不替换原内容
安全操作与技巧
-
预览结果(避免误操作)
添加-n
参数模拟执行,不实际修改文件:rename -n 's/old/new/' *.txt
-
强制覆盖(谨慎使用)
-f
参数覆盖已存在的目标文件:rename -f 's/old/new/' *
-
递归处理子目录
结合find
命令:find . -name "*.txt" -exec rename 's/old/new/' {} \;
常见问题解决
-
报错”Argument list too long”
文件过多时,改用find
分批处理(见上节递归操作)。 -
提示”未安装rename”
安装对应版本:# Debian/Ubuntu(Perl版) sudo apt install rename # CentOS/RHEL(util-linux版) sudo yum install util-linux
- Perl版本:功能强大,支持正则表达式,适用复杂重命名。
- util-linux版本:语法简单,仅支持基础替换。
操作前务必用-n
预览结果,并确认版本差异,批量重命名时,正则表达式能显著提升效率,建议掌握基础匹配规则(如^
、、\d
等)。
引用说明:本文内容参考Linux man-pages项目(man7.org)及Perl正则表达式官方文档(perldoc.perl.org),操作已在Ubuntu 22.04/CentOS 7实测验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5769.html