在linux系统中,当需要对大量文件进行统一的重命名操作时,手动逐个修改效率极低,rename命令是专门用于批量修改文件名的工具,能够快速完成各类规则的文件名调整任务。

rename命令的基本语法
linux下常见的rename命令有两种实现版本,分别是Perl版本的rename和C语言版本的rename,两者语法存在差异,使用前可以先通过rename --version查看当前系统使用的版本。本文主要介绍使用更广泛的Perl版本rename,其基本语法如下:
rename [选项] '正则表达式' 待修改的文件
常用选项说明:
- -v:显示重命名过程的详细信息,方便查看修改结果
- -n:模拟执行重命名操作,不会实际修改文件名,用于测试规则是否正确
- -f:强制覆盖已存在的文件,避免重命名冲突报错
常见批量重命名场景实现
替换文件名中的指定字符
如果需要将当前目录下所有文件名中的old替换为new,可以使用以下命令:
# 先模拟执行查看效果 rename -n 's/old/new/' * # 确认规则正确后实际执行 rename -v 's/old/new/' *
这里的s/old/new/是Perl正则表达式的替换语法,表示将匹配到的old字符串替换为new。
给文件名添加统一前缀或后缀
给所有txt文件添加backup_前缀,命令如下:
rename -v 's/^/backup_/' *.txt
正则表达式中的^表示匹配文件名的开头位置,在开头添加指定前缀。如果要添加后缀,比如在txt文件名末尾添加_2024(注意这里不写年份,仅作示例逻辑),命令为:
rename -v 's/.txt$/_2024.txt/' *.txt
其中.txt$表示匹配以.txt结尾的文件名,替换时保留扩展名并添加后缀内容。
批量修改文件扩展名
将当前目录下所有.jpeg文件的扩展名修改为.jpg,命令如下:
rename -v 's/.jpeg$/.jpg/' *.jpeg
这里需要注意对点号进行转义,因为正则表达式中未转义的点号会匹配任意单个字符,转义后.jpeg才能准确匹配jpeg扩展名。
删除文件名中的指定内容
如果要删除文件名中的test_前缀,命令如下:
rename -v 's/^test_//' *
替换部分为空字符串,即可实现删除匹配内容的效果。
使用注意事项
1. 执行重命名操作前,建议先使用-n选项模拟执行,确认修改规则符合预期,避免误操作导致文件名错误。
2. 如果待修改的文件名包含空格,rename命令依然可以正常处理,不需要额外添加引号包裹文件名参数。
3. 当批量修改的文件数量较多时,建议先对少量文件测试命令效果,确认无误后再处理全部文件。
4. 如果系统使用的是C语言版本的rename,语法会有所不同,比如批量替换字符的语法为rename old new 文件列表,使用时需要先确认版本再选择对应语法。