Mac 批量重命名文件,不需要装任何软件
大多数人不知道:Mac 批量改文件名根本不用下载改名工具,也不用 Automator 或 AppleScript。从 OS X Yosemite(2014)开始,Finder 就内置了批量重命名,覆盖你真正会用到的三种操作——查找替换、加前缀/后缀、顺序编号。零安装,零订阅,一个文件都不用打开。
这篇从零操作成本的 Finder 路线讲到需要精细控制时的终端命令。(2026 年 9 月更新——下文每条终端命令都重新跑过验证。)
十秒选方法:
| 你想做的事 | 用什么 | 能撤销吗 |
|---|---|---|
把 IMG_ 换成有意义的名字 | Finder → 替换文本 | ⌘Z |
| 给每个文件加项目名或日期 | Finder → 添加文本 | ⌘Z |
重新编号为 名称 001、名称 002… | Finder → 格式 | ⌘Z |
| 递归处理子文件夹 | 终端 find / zmv | 不能——先干跑 |
| 正则、条件逻辑、可复用脚本 | 终端 | 不能——先干跑 |
快捷路线:Finder 内置批量重命名
选中要改名的文件,按住 Control 点按(或右键)选中项,选择重新命名。选中多个文件时,菜单会变成给 [N] 个项目重新命名…,弹出一个只有一个下拉框的小对话框。这个下拉框就是全部工具——三种模式:
| 模式 | 作用 | 适用场景 |
|---|---|---|
| 替换文本 | 在每个文件名里查找一段文字并替换 | 清掉 IMG_ 这类前缀,或批量改正错别字 |
| 添加文本 | 在名字前或后加一段固定文字 | 给文件打上项目名或日期标记 |
| 格式 | 用自定名称 + 计数器/索引/日期重建文件名 | 把一团乱麻变成 旅行 1、旅行 2…… |
几个能省去麻烦的细节:
- 先选中,再改名。 只有选中多个项目时才是批量模式,单个项目只会进入普通的行内改名。
- 文件、文件夹、磁盘都适用。 同一个对话框、同一套规则。
- 扩展名不会被动。 Finder 只改名字部分,不会碰
.jpg/.pdf。
替换文本——清理统一前缀
选替换文本,输入要查找的文字和替换文字(留空即为删除),点重新命名。把 DSC_ 替换成 海边-,DSC_0142.jpg 就变成 海边-0142.jpg。这是使用频率最高的模式:相机导出、截图堆、导出文件夹一次清完。
添加文本——加前缀或后缀
选添加文本,输入文字,选名称之前或名称之后。「之后」会落在扩展名前面,不会破坏文件类型。
格式——顺序编号
选格式,用于旧文件名已经没救、只想要一列干净编号的情况。设置名称格式(名称和索引 / 名称和计数器 / 名称和日期)、自定义名称,以及起始编号。结果类似 发票 001、发票 002。
两个决定结果的细节:
- 窗口排序 = 编号顺序。 Finder 按当前窗口显示顺序编号,所以先按日期或名称排好序,再打开对话框。
- 索引 vs 计数器。 索引是
1、2、3…;计数器补足五位(00001)。想要正好三位补零,用下面的终端printf循环。
> 改完后悔了?立刻按 Command-Z——整批重命名会作为一步撤销。
进阶路线:终端
Finder 对话框很好用,直到你需要条件逻辑、递归或它表达不了的模式匹配。这时进终端。mv 没有撤销,所以下面每条配方都遵循同一个仪式:先在命令前加 echo 干跑一遍,看清会发生什么,再去掉 echo 真正执行。
按模式替换整个文件夹(zsh,Catalina 起的 Mac 默认 shell):
# 把当前文件夹里所有 .jpg 的 "IMG_" 换成 "旅行-"
autoload -U zmv
zmv -n 'IMG_(*).jpg' '旅行-$1.jpg' # -n = 干跑;去掉后才真正执行
精确补零的顺序编号(shot-001.jpg、shot-002.jpg……):
i=1
for f in IMG_*.jpg; do
mv -n -- "$f" "$(printf 'shot-%03d.jpg' "$i")"
((i++))
done
去掉 macOS 截图文件名里的空格:
for f in Screenshot*.png; do mv -n -- "$f" "${f// /-}"; done
给文件夹里每个 PDF 加今天的日期前缀:
for f in *.pdf; do mv -n -- "$f" "$(date +%F)-$f"; done
递归进子文件夹——Finder 对话框完全做不到的事:
# 先预览所有匹配……
find . -name 'IMG_*.jpg' -print
# ……再逐目录执行改名
find . -name 'IMG_*.jpg' -execdir zsh -c 'mv -n -- "$1" "${1/IMG_/旅行-}"' _ {} \;
关于 -n 参数:这是你的防撞车安全网。目标文件名已存在时,mv -n 会跳过而不是静默覆盖——我们更新本文时实测验证过:源文件原样保留,不会丢任何东西。代价是跳过是安静发生的,所以大批量操作后用 ls | wc -l 数一下文件数,确认和预期一致。
该用哪个?
- 一个文件夹、明确的查找替换或干净编号 → Finder。 比敲命令快,还有 ⌘Z。
- 递归子文件夹、正则、以后要重复用的脚本 → 终端。 值得多一分谨慎。
常见问题
Mac 上不下载软件怎么批量改文件名? 在 Finder 里选中文件,右键选给 [N] 个项目重新命名…,用替换文本、添加文本或格式模式。Yosemite(2014)之后的每一版 macOS 都自带。
怎么把文件按顺序编号(文件 1、文件 2……)? Finder → 格式 → 「名称和索引」,按窗口当前排序编号。想要 001 这样的补零格式,用上面的 printf 终端循环。
Finder 能连子文件夹一起改吗? 不能——重命名对话框只处理当前窗口选中的内容。递归要用终端(find 或 zmv),或者进每个子文件夹分别全选。
批量重命名能撤销吗? Finder 可以:⌘Z 一步撤销整批。终端不行——所以每条配方都有干跑形式(echo mv … 或 zmv -n)。
为什么终端批量改名后有几个文件没改? 几乎都是重名冲突:目标名已存在时 mv -n 会跳过而不是覆盖。重新干跑一遍,找出重复的目标名。
批量整理文件时,你多半也在处理格式和导出——同样的批量思路适用于用 sips 从终端调整图片尺寸和把截图合并成一个 PDF。