macOS批量修改文件创建日期需用终端工具:一、SetFile命令统一设时间;二、exiftool写元数据并同步时间戳;三、Shell脚本解析文件名提取时间;四、Python调用os.setxattr设birthtime(macOS 12+ APFS)。

如果您需要在 macOS 系统中批量调整多个文件的创建日期,但 Finder 不提供直接操作入口,则需借助终端命令行工具实现。以下是几种可靠且可复现的操作方法:
一、使用 touch 命令配合 stat 和 xargs 修改创建时间
macOS 的 touch 命令默认仅修改访问时间和修改时间,但结合 SetFile 工具(来自 Xcode 命令行工具)可精确设定创建日期。此方法适用于已知目标时间且需统一赋值的场景。
1、打开终端,执行 xcode-select --install 确保已安装命令行工具。
2、确认 SetFile 可用:输入 which SetFile,返回路径即表示就绪。
3、进入目标文件所在目录,例如:cd /Users/username/Documents/testfiles。
4、运行以下命令将当前目录下所有 .txt 文件创建时间设为 2023 年 1 月 1 日 12:00:00:for f in *.txt; do SetFile -d "01/01/2023 12:00:00" "$f"; done。
二、利用 exiftool 批量写入创建日期(支持元数据感知文件)
exiftool 是跨平台元数据处理工具,对图像、PDF、音频等含标准元数据的文件可直接写入 CreateDate 字段,并同步更新文件系统创建时间(需配合 -api QuickTimeUTC=1 等参数及 macOS 特定行为)。
1、通过 Homebrew 安装 exiftool:brew install exiftool。
2、检查某图片的原始创建时间:exiftool -CreateDate IMG_1234.jpg。
3、将指定目录内全部 JPEG 文件创建时间设为 2022-06-15 09:30:00:exiftool -CreateDate="2022:06:15 09:30:00" -api QuickTimeUTC=1 /path/to/images/*.jpg。
4、强制刷新文件系统时间戳(部分版本需手动触发):touch -c -t 202206150930.00 /path/to/images/*.jpg。
三、编写 shell 脚本实现按文件名或修改时间推算创建时间
当原始创建时间丢失但存在命名规律(如 “IMG_20230405_142230.jpg”)或与修改时间高度接近时,可通过脚本提取时间信息并反向注入 SetFile。
1、新建脚本文件:nano set_creation_from_name.sh。
2、粘贴以下内容(以 YYYYMMDD_HHMMSS 格式命名的 JPG 文件为例):#!/bin/bash; for f in *.jpg; do if [[ $f =~ ([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]{2})([0-9]{2})([0-9]{2})\.jpg ]]; then y=${BASH_REMATCH[1]}; m=${BASH_REMATCH[2]}; d=${BASH_REMATCH[3]}; H=${BASH_REMATCH[4]}; M=${BASH_REMATCH[5]}; S=${BASH_REMATCH[6]}; SetFile -d "$m/$d/$y $H:$M:$S" "$f"; fi; done。
3、赋予执行权限:chmod +x set_creation_from_name.sh。
4、运行脚本:./set_creation_from_name.sh。
四、使用 Python 脚本调用 os.setxattr 修改 birthtime(需 macOS 12+ 及 APFS 卷)
从 macOS Monterey(12.0)起,APFS 文件系统支持通过 extended attribute 写入 birthtime,Python 的 os.setxattr 可直接操作,但需 root 权限且仅对新创建或未被硬链接的文件生效。
1、确认文件系统类型:df -T .,输出应含 apfs。
2、创建脚本:nano set_birthtime.py。
3、写入代码:import os, sys; path = sys.argv[1]; ts = int(sys.argv[2]); os.setxattr(path, 'com.apple.birthtime', ts.to_bytes(8, "little"))。
4、执行示例(设置 test.txt 创建时间为 1672531200 秒,即 2023-01-01 00:00:00 UTC):sudo python3 set_birthtime.py test.txt 1672531200。










