Mac 批量重命名文件:四种实用方法

Mac 批量重命名文件:四种实用方法

作者 Josh Callahan阅读约 11 分钟

相机导出来的文件还叫 IMG_2041.JPG 这种名字,旁边的客户文件夹里,同一个项目代号从头到尾都拼错了。你想要一套有意义的文件名,但又不想打乱照片顺序,更不想改完才发现连扩展名也一起被改掉了。

这其实是两类不同的活儿。Mac 上的批量重命名,最好按你要应用的规则来选工具,而不是看你选了多少个文件。一次性的改动用访达;反复出现的导入任务,存成一个工作流;只有当命名规则确实需要时,才动用终端。动手之前,先想好怎么检查结果、怎么撤回。

选一种批量重命名方法 ​

先用大白话把想要的改动写下来。把 ACNE 换成 ACME,是访达能搞定的活儿。给每个导出文件加上交付日期并重新编号,是自动化的活儿。只在 SCAN_ 出现在文件名开头时才删掉它,是模式匹配的活儿。

别因为文件夹看着乱就急着写脚本。选中的文件再多,规则简单,它依然是个简单的重命名。反过来,哪怕只有几个文件,如果同一段文字出现在不同位置,也可能需要认真的模式匹配。

Mac 批量重命名该用哪种方法

方法适用场景能改什么如何撤回
访达“重新命名”一次选中、一次完成替换文本、添加文本,或“名称加索引/计数器/日期”在进行其他操作之前立即按 Command-Z
自动操作“快速操作”每次导入或交付都用同一条规则在保存的流程中生成顺序名称、补零编号和日期前缀先在副本上测试,直到示例名称正确
快捷指令在当前 macOS 上做小型、可重复的操作添加或替换步骤,或经过测试的 shell 操作,从菜单中启动先在复制的文件夹上测试
终端 mv 循环访达无法表达的模式、前缀或日期顺序循环或替换规则所描述的任何改动在执行任何 mv 之前先打印出计划中的名称
专门的重命名 App多步骤配方,或要把相机拍摄日期写进文件名超出内置功能的预览网格和串联规则查看 App 的预览、撤销支持,并到开发者官网确认当前价格

选够用的最小工具 ​

如果你已经选好了文件,访达就是理想的起点。它的“替换文本”“添加文本”和“格式”三种模式,涵盖了文本替换、加前缀或后缀,以及“自定名称加索引、计数器或日期”。一个反复出现的客户代号拼写错误,实在没必要为此装别的软件。

如果你总在重建同一条规则,自动操作的设置功夫就值得花。比方说,你每周的照片导入总要有统一的基础名称、序号和导入日期,那就把这套组合存下来,别每次都靠脑子记设置。

快捷指令适合那种想从访达或菜单栏随手调用的小动作。把自动操作和快捷指令看作保存可重复操作的两种备选方式,而不是非得搭配使用的两样东西。

什么时候值得用专门的 App ​

如果你想逐个检查每个拟定的文件名,同时串联好几步转换,专门的重命名 App 就派得上用场。相机拍摄日期是另一个理由,尤其当你需要根据 EXIF 而不是导入当天来生成名称的时候。

具体功能和价格,请以开发者自己的页面为准。别想当然地认为每款重命名工具都能同样好地处理相机元数据、附属文件、重名冲突或撤销。

选之前,先写下一组有代表性的“改前/改后”对照。比如,SCAN_contract_SCAN_final.pdf 应该变成 contract_SCAN_final.pdf,而不是 contract_final.pdf。这个差别比文件夹有多大更能说明问题。

选定一条路线,然后测试。已选中的文件里有个拼写错误,到访达为止就够了。经常性的交付,存一个工作流。对位置敏感的改动,用易读的终端循环,或者用规则等价的可视化重命名工具。

在访达中重命名文件 ​

访达不用装任何额外软件,就能处理普通的批量重命名。Apple 的“重新命名文件、文件夹和磁盘”指南写明了怎么选中多个项目、按住 Control 键点按选中的内容,再使用“替换文本”“添加文本”或“格式”。

假设你在整理一次度假拍的照片。你可能想保留相机编号并加上 Lisbon- 前缀,把 IMG_ 换成 Trip-,或者干脆丢掉原来的名字、重新生成一组序号。这几种选择保留的信息各不相同,所以打开对话框之前,先想好你要的结果。

从选择到重命名的基本流程是这样的:

一张三步图示,展示如何在 Mac 上用访达批量重命名文件。

选中文件并设定规则 ​

  1. 在访达中打开工作文件夹。 如果要替换掉有用的相机编号,请用一个复制出来的文件夹。需要方便查看文件名时,切换到“列表”视图。

  2. 选中要处理的文件。按住 Shift 点按可以选中一个连续范围;按住 Command 点按可以选中零散的项目,而不会把中间的全选进去。确认没有误选无关的导出文件或文件夹。

  3. 按住 Control 键点按任一选中的项目,选取“重新命名”。 保持选择状态不变。规则会应用到所有选中的项目,而不只是指针下面那一个。

  4. 选择与你预期结果相符的模式。对于度假照片,用**“替换文本”把 IMG_ 换成 Trip_,或用“添加文本”**在保留相机名称的同时加上 Lisbon- 前缀。

  5. 如果要彻底换一套命名方案,选**“格式”。在“名称和索引”“名称和计数器”“名称和日期”中选一个。把共用的名称部分,比如 Lisbon-Trip-,填进“自定格式”**,再选择生成的那部分放在它前面还是后面。

  6. 使用带编号的格式时,设置**“起始编号”。仔细看访达给出的示例,包括分隔符、生成的位数和扩展名。只有当示例与你想要的结构一致时,才点按“重新命名”**。

共用的文字应该放在“自定格式”里,而不是“起始编号”那一栏。填一个起始编号,本身并不会给你一个有描述性的文件名。把你想要的连字符或下划线一并写进自定名称里。

保留相机编号,还是有意替换掉 ​

“替换文本”不会生成新的序号。把 IMG_ 换成 Trip_,保留的是原来的相机编号,所以 IMG_2041.JPG 会变成 Trip_2041.JPG。当有人需要把修好的图和相机原片对上号时,这样做很有用。

“添加文本”保留的信息更多。加上 Lisbon- 前缀会得到 Lisbon-IMG_2041.JPG,名字更长,但便于追溯。

“格式”会用你选的方案取代原来的名称主干。 当你想要的是交付用的序号而不是相机编号时,就用它。请看访达示例里的实际计数位数,别默认“名称和索引”会补出某个特定的零位数。如果你的交付规范要求精确的位数,请使用带有明确补零控制的工作流。

访达的这个命令并不局限于照片。你可以用同样的办法处理选中的项目文件夹或文档,而磁盘的命名也包含在 Apple 的重命名流程里。想让这类活儿少点麻烦,可以看看我们讲选择和导航习惯的 Mac 访达使用技巧。

应用重命名之后,检查第一个、最后一个,以及中间的几个名字。如果结果不对,立刻按 Command-Z,在进行任何其他访达操作之前。别先做第二次“纠正性”重命名,还指望原来那批能轻松恢复。

如果每次导入都要重复这些设置,就把这个操作存下来,别每次重新点一遍对话框。

用自动操作或快捷指令重复执行 ​

输入会变、规则不变的时候,保存下来的重命名就很有用。每周的照片导入可能需要统一的名称主干加导入日期前缀;一批研究数据集可能需要为下游处理生成统一的序号。

自动操作可以让你用访达的各种操作拼出这个流程。下图展示了这种工作流思路:

一幅手绘插图,展示如何用 Mac 自动操作工作流实现批量重命名文件的自动化。

保存一个“日期加序号”的快速操作 ​

Apple 在照片自动化演示中,展示了三位数编号、前面补零的顺序重命名,然后再用连字符加上当前日期。这给了你一个可以直接改造的具体配方,而不是一堆互不相干的重命名步骤。

  1. 打开自动操作,新建一个“快速操作”。 把工作流设为接收访达中的“文件或文件夹”。这样,访达里选中的项目就成了工作流的输入。

  2. 搜索**“重新命名访达项目”**,把它拖进工作流。当自动操作提示添加“拷贝访达项目”时,如果你想让工作流处理副本,就接受。为这些副本指定一个明确的目标位置。

  3. 把重命名操作设为**“制作顺序名称”**。填入新的基础名称,选好分隔符,并启用带前导零的编号位数控制。对于这个配方,位数与 Apple 示例保持一致。

  4. 在后面再加一个“重新命名访达项目”操作。选择**“添加日期或时间”**,使用当前日期,放在名称前面,并选择连字符作分隔符。检查显示出来的日期格式,别想当然地依赖你所在地区的默认格式。

  5. 把这个快速操作存为 Date and Sequence。 在访达中选一小批复制出来的文件,打开“快速操作”并运行。在拿它去处理交付用的原始文件夹之前,先检查实际输出。

补过零的序号,在逐字符比较文件名的软件里会保持一致。访达常常按自然数顺序排序,但接收方的上传系统、脚本或压缩包查看器可能不会。给文件名定规矩时,要为目的地考虑,而不只是看你访达窗口里好不好看。

对于每周的照片导入,把日期标清楚:“当前日期”指的是处理日期,而不是相机拍摄日期。对于研究数据集,先确认重新分配序号不会破坏电子表格或分析脚本里用到的标识符。

把快捷指令当作小巧的启动器 ​

新建快捷指令时,在详细信息里启用**“用作快速操作”**和“访达”,然后让它接受文件作为输入。简单的转换用“对每个项目重复”加“重新命名文件”;如果是已经测试过的命名规则,就用“运行 Shell 脚本”。如果用 shell 操作,请把选中的文件作为参数传进去,而不是用没加引号的文本去拼路径。

第一个版本要保持简单。只加一个项目代号的快捷指令,比同一趟里又重命名、又移动、又排序、又删除的好验证得多。

想看配套的视频演示,可以看这段:

Tech Today 的简单任务自动化步骤提供了很有用的背景,帮你在自动化之前先识别出重复性的工作。如果你的重命名还需要一个可靠的启动方式,我们的 Mac 自动化 App 指南或许能帮上忙。

在输出与你的命名规范完全一致之前,保留第一批文件的原始副本。一个运行成功的工作流,照样可能产出错误的名称。

用终端做模式化重命名 ​

只改前缀的需求,正是访达那种简单替换显得太“粗”的地方。如果 SCAN_ 既出现在文件名开头,也出现在中间,你可能只想删掉开头那一处。调整日期顺序也需要类似的精确度。

标准的 macOS 安装里并没有通用的 rename 命令。可靠的内置做法是在 zsh 循环里用 mv,并在真正移动任何东西之前,先做一遍只打印、不执行的预览。

预览前缀改动 ​

打开“终端”,输入 cd (后面带一个空格),把访达里一个复制出来的工作文件夹拖进窗口,然后按回车键。继续之前,先确认你进的是副本。这些例子假定文件名是普通的,不含换行符。

预览添加项目前缀:

for f in *.jpg; do
  echo "$f -> Project_$f"
done

逐条检查每个拟定的目标名。确认无误后,对应的重命名命令是:

for f in *.jpg; do mv "$f" "Project_$f"; done

小写的匹配模式只匹配 .jpg,并不涵盖扩展名所有可能的大小写写法。匹配范围收窄反而有好处:它能防止你处理的范围超出预期。

如果只想删掉开头的 SCAN_,可以预览一下参数展开:

for f in SCAN_*; do
  new="${f#SCAN_}"
  echo "$f -> $new"
done

${f#SCAN_} 只会去掉匹配的前缀,后面出现的 SCAN_ 原样保留。检查完目标名之后,把预览那行换成 mv -i "$f" "$new";交互式选项 -i 会在目标已存在、要被覆盖时先问你一声。

别为了让循环继续跑下去就随手同意覆盖。出现冲突,说明你的命名规则需要再检查一遍。

用易读的正则调整日期顺序 ​

假设有个笔记叫 03-12-2024-meeting.txt,用的是日-月-年的写法,应该改成 2024-12-03-meeting.txt。先用下面的命令预览:

for f in *.txt; do
  new=$(echo "$f" | sed -E 's/^([0-9]{2})-([0-9]{2})-([0-9]{4})/\3-\2-\1/')
  echo "$f -> $new"
done

这几个捕获组分别代表日、月、年。替换时把年份提到最前面,同时保留文件名的其余部分。sed -E 启用扩展正则表达式,所以重复次数的花括号不需要额外加反斜杠。

它检查的是日期的“形状”,而不是这是否是一个有效的日历日期。应用之前,先确认源文件确实是日-月-年的写法。

逐行检查完之后,用同样的替换,加上带保护的移动:

for f in *.txt; do
  new=$(echo "$f" | sed -E 's/^([0-9]{2})-([0-9]{2})-([0-9]{4})/\3-\2-\1/')
  if [[ "$f" != "$new" ]]; then
    mv -i "$f" "$new"
  fi
done

给变量加引号,可以保住文件名里的空格。那个比较会跳过没有变化的名称,免得把一个文件“移动”到它自己身上。

通过 Homebrew 装的第三方 rename 可以让正则操作更简短,但不同的实现语法各异。如果一个易读的循环已经能搞定,这个就不必装了。

终端里的重命名没有访达那样的撤销。保留原始文件夹,别运行任何你没法大声解释清楚的命令,包括它选中了哪些文件、每个目标名是什么。

保护顺序、元数据,并留好后路 ​

没补零的编号,在按字典序排序的工具里可能出现意想不到的顺序。访达的自然数排序可能会掩盖这个弱点,直到你把文件夹上传,或者交给用别的软件的人才露馅。把文件名当作一条可移植的排序规则,而不只是一个在本地看着顺眼的标签。

编号之前,先想清楚这个序号代表什么。按字母顺序的相机顺序、文件创建顺序和真实的拍摄顺序,并不是一回事。在混用多台相机的文件夹里,请检查拟定的序号,别以为可见的日期列就代表每张照片的拍摄时刻。

动手前先做一遍检查 ​

碰真正那批文件之前,先在复制出来的文件夹上对照这张表过一遍。

重命名常见错误与解决办法

错误你会看到什么解决办法
编号没补零按字典序排序时,顺序是 1、10、11、2把编号格式化为 001 或更宽
替换误伤扩展名文件用错误的 App 打开,或丢失了类型检查预览结果仍以原来的后缀结尾
没做预览整个文件夹一下子全错了先在副本上检查访达的示例行,或 echo 循环的输出
只改大小写mv 提示是同一个文件先改成一个临时名称,再改成最终的大小写
日期以“日”开头日期按日分组,而不是按时间顺序把年份放最前面,用 YYYY-MM-DD
文件仍处于打开状态App 又重新创建了旧名称先关掉这些 App,再重命名

扩展名要单独多看一眼。针对 jpg 的宽泛替换,可能连 .jpg 也一起改了;而一个重建整个名称的脚本,可能干脆把后缀漏掉。重命名扩展名并不会转换文件的内容。

在 Mac 上常见的不区分大小写的卷上,只改大小写需要小心。如果 shell 重命名报告源和目标是同一个文件,就先移到一个唯一的临时名称,再改成最终名称。检查那个临时名称不能已经存在。

区分文件名和文件内容 ​

正常的重命名改的是目录项,而不是文件里面的字节。它不会改写 EXIF 拍摄日期、文档文字,也不会改动被重命名文件夹内部那些文件的名称。不过,也别保证所有文件系统、云服务或配套工作流都会让所有时间戳原封不动。

先在编辑它们的 App 里关闭文件。有些 App 能继续使用已经打开的文件;有些则会在旧名称下另存一份,或者找不到被链接的素材。媒体资料库、设计文档和代码项目在外部重命名之后,可能需要重新链接。

关于持续的命名规范,我们的数字文件整理指南能帮你把易读的名称和一套你能长期维护的文件夹结构衔接起来。再漂亮的命名方案,也修不好项目内部已经断掉的引用。

能否恢复,取决于所用的方法。 访达批量重命名出错了,用访达的即时撤销。对于自动化和终端,要靠没动过的原始文件,别指望 Command-Z 能把操作还原。shell 里的移动,也不会把旧文件名放进废纸篓。

在副本上预览,编号补零,别动扩展名,然后再去重命名真正的那一批。


名称统一之后,我们还提供文件夹颜色和图标,让这些项目在访达里一眼就能分清。访问 Tintd,一次操作就能给多个文件夹设置样式;也可以用“文件夹监视器”,根据名称自动给新建的文件夹套上匹配的颜色和图标。

Josh Callahan

作者

Josh Callahan

文案撰稿人

分享这篇文章

准备好让您的文件夹变得漂亮了吗?

只需点击几下即可为您的文件夹图标上色。

下载 Mac 版