在 macOS 的命令行(Terminal)中,有几种方法可以重命名文件,最常用和最强大的工具是 mv 命令,此外还有专门用于批量重命名的工具。

使用 mv 命令(最常用)
mv 命令是 "move" 的缩写,它的核心功能是移动文件,但当源文件和目标文件在同一个目录下时,它就实现了“重命名”的功能。
基本语法
mv [源文件名] [新文件名]
示例
-
简单重命名 假设你有一个文件叫
report.txt,想把它重命名为final_report.txt。# 查看当前文件 ls # 输出: report.txt # 执行重命名 mv report.txt final_report.txt # 再次查看确认 ls # 输出: final_report.txt
-
重命名时覆盖确认 如果新文件名已经存在,
mv默认会直接覆盖它,且不会有任何提示,为了避免意外覆盖,可以使用-i(interactive) 选项。# 假设 final_report.txt 已经存在 mv -i report.txt final_report.txt # final_report.txt 存在,系统会提示: # mv: overwrite 'final_report.txt'? y # 输入 'y' 确认覆盖,输入 'n' 或其他则取消。
-
移动并重命名 这其实是
mv的主要功能,你可以将一个文件移动到另一个目录,并同时给它一个新的名字。
(图片来源网络,侵删)# 将当前目录的 'image.jpg' 移动到 'documents' 目录,并重命名为 'photo.jpg' mv image.jpg documents/photo.jpg
使用 rename 命令(批量重命名)
当你需要对多个文件进行有规律的重命名时,mv 命令会变得非常繁琐,这时 rename 命令就非常强大了。
注意: macOS 自带的 rename 命令功能非常有限(主要用于添加文件后缀),强烈建议安装功能更强大的 Perl 版本的 rename 命令。
安装 Perl 版本的 rename
使用 Homebrew 包管理器来安装,这是最简单的方式。
-
如果你还没有安装 Homebrew,请先安装:
(图片来源网络,侵删)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
安装
rename:brew install rename
安装后,这个强大的
rename命令通常会被命名为prename或直接覆盖系统自带的rename,你可以通过which rename查看它指向哪里,下面我们假设它直接可用。
rename 命令基本语法
rename [选项] '表达式' 文件名...
- 表达式:这是一个 Perl 正则表达式,用于匹配和替换文件名中的部分内容。
s/搜索模式/替换模式/:这是最常用的表达式,表示“替换”。搜索模式:你想要找到的字符串,可以使用正则元字符。替换模式:你想要替换成的字符串。/g:全局替换,替换一行中所有匹配项,对于文件名通常需要。/i:忽略大小写。
示例
假设当前目录有以下文件:
IMG_001.jpg, IMG_002.jpg, IMG_003.jpg, notes.txt
-
统一添加前缀 给所有
.jpg文件名前添加vacation_。rename 's/^/vacation_/' *.jpg
s/.../.../是替换操作。^是正则表达式,表示“字符串的开头”。vacation_是要添加的内容。*.jpg是所有以.jpg结尾的文件。
执行后,文件变为:
vacation_IMG_001.jpg,vacation_IMG_002.jpg, ... -
统一修改后缀 将所有
.jpg文件的后缀修改为.jpeg。rename 's/\.jpg$/\.jpeg/' *.jpg
\.:匹配 字符本身,而不是正则里的任意字符。- 表示“字符串的结尾”。
- 注意:这里不需要
/g,因为文件名后缀只出现一次。
-
修改文件名中的字符 将文件名中的
IMG_替换为PHOTO_。rename 's/IMG_/PHOTO_/g' *.jpg
-
删除文件名中的部分内容 删除所有
.jpg文件名中的IMG_。rename 's/IMG_//g' *.jpg
-
使用小写/大写转换
- 将所有文件名转为小写:
rename 'tr/A-Z/a-z/' *
- 将所有文件名转为大写:
rename 'tr/a-z/A-Z/' *
- 将所有文件名转为小写:
-
更复杂的正则表达式 将
IMG_001.jpg格式的文件重命名为photo_001.jpg。rename 's/^IMG_(\d+)\.jpg$/photo_$1.jpg/' *.jpg
IMG_:匹配字面量。(\d+):匹配一个或多个数字,并用 捕获起来,成为一个“分组”。\.jpg$:匹配.jpg在结尾。photo_$1.jpg:$1代表第一个捕获到的分组(也就是数字部分)。
使用 zsh 的自动补全和参数扩展(macOS 默认 Shell)
从 macOS Catalina 开始,默认的 Shell 已经从 Bash 改为了 Zsh,Zsh 提供了非常方便的命令行自动补全和参数扩展功能,可以简化重命名操作。
示例
假设你想把 my_long_file_name.txt 重命名为 my_short_file.txt。
-
使用 Tab 键自动补全输入旧文件名,然后按
Ctrl + A跳到行首。mv my_long_file_name.txt<Tab> # 输入到这,然后按 Ctrl+A
-
现在光标在行首,输入新文件名,但将旧文件名的一部分拖到新文件名中。
mv my_long_file_name.txt my_short<Tab>
当你按
Tab时,Zsh 会自动补全my_short_file.txt。 -
更强大的方式:使用
^old^new语法 这是一个历史记录替换的快捷方式,非常适合快速修改上一个命令中的内容。# 先执行一个命令,比如创建一个文件 touch this_is_a_test_file.log # 现在想把它重命名为 this_is_a_final_file.log # 你可以不用重新输入整个 mv 命令 mv ^test^final
这个命令会找到上一个命令中的
test并替换为final,然后执行它,等同于:mv this_is_a_test_file.log this_is_a_final_file.log
总结与推荐
| 场景 | 推荐命令 | 优点 | 缺点 |
|---|---|---|---|
| 单个文件重命名 | mv old_name new_name |
简单、直接、系统自带 | 不适合批量操作 |
| 少量文件重命名 | mv + Tab/Ctrl+A/Zsh 语法 |
快捷、无需安装 | 规律性不强时效率低 |
| 大量文件有规律重命名 | rename 's/.../.../' |
功能极其强大、灵活 | 需要学习正则表达式,需安装(通过 Homebrew) |
快速建议:
- 重命名一两个文件? 直接用
mv。 - 要给几十个照片统一改名? 花五分钟装一下
brew install rename,然后用prename(或rename),会节省你大量的时间。
