在linux中批量重命名文件可用rename和mmv命令。rename支持正则表达式,适用于统一替换操作,如修改后缀、加前缀、去空格等;使用格式为rename ‘s/原内容/新内容/’ 文件列表。mmv适合结构化重命名,支持通配符匹配,常用于编号重组、路径拼接等场景;语法为mmv "匹配模式" "替换模式"。rename灵活但需注意转义字符,mmv直观但需用双引号包裹模式;简单替换用rename,复杂结构用mmv。
在linux系统中,批量重命名文件是常见的操作需求,比如整理照片、日志文件归档、数据预处理等。如果你还在手动一个一个改名,那确实有点费劲了。其实,用好 rename 和 mmv 这两个命令,可以非常高效地完成批量重命名任务。
一、rename:基础又强大的批量改名利器
rename 命令支持正则表达式,适合做统一格式的替换操作,比如去掉空格、添加前缀、修改扩展名等。
使用方法:
rename 's/原内容/新内容/' 文件列表
举个例子,把所有 .txt 文件改成 .log:
rename 's/.txt$/.log/' *.txt
注意这里用了 perl 兼容的正则语法,所以括号、点号这些特殊字符要加反斜杠转义。
常见用途:
-
批量去除文件名中的空格(替换为空):
rename 's/ //g' *.jpg
-
给文件统一加前缀:
rename 's/^/photo_/' *.jpg
-
修改后缀名:
rename 's/.bak$/.old/' *.bak
⚠️ 小提示:建议先加上 -n 参数测试效果,确认没问题再执行真实操作。
二、mmv:适合复杂匹配与结构化重命名
mmv 是另一个专门用于批量移动、复制、追加和重命名文件的工具,尤其适合有规律的文件名转换,比如按编号排序、拼接路径等。
不过默认很多系统没装这个命令,你需要先安装:
sudo apt install mmv # Debian/Ubuntu sudo yum install mmv # centos
基本语法:
mmv "匹配模式" "替换模式"
比如,将 file1.txt, file2.txt 改为 newfile1.txt, newfile2.txt:
mmv "file*.txt" "newfile#1.txt"
这里的 #1 表示第一个通配符的内容。
实际应用场景:
-
给文件加固定前缀:
mmv "*.log" "backup_#1.log"
-
交换文件名顺序(比如从“年月日”改为“日月年”):
mmv "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" "#4#5#6#7#8#1#2#3"
这样 20240315 就会变成 15202403。
-
多层目录下批量重命名:
find . -name "*.tmp" -exec mmv "{}" "{}.old" ;
? 使用技巧:mmv 的模式匹配比较严格,记得引号要用双引号,避免被 shell 提前解析。
三、什么时候用哪个?
简单总结一下两者适用场景:
- rename 更适合基于正则表达式的灵活替换,适合有一定脚本经验的人;
- mmv 更适合结构化的、有编号或固定格式的批量重命名,逻辑更直观。
如果你只是想统一替换某个字符串,或者调整大小写,rename 足够了;但如果你要做复杂的编号重组、路径拼接,那就更适合用 mmv。
基本上就这些。这两个命令都不复杂,但在实际使用时容易忽略一些细节,比如是否需要转义字符、是否要测试运行等。用好了,它们能大大提升你处理文件的效率。