applescript 无法直接修改 macos 文件完整元数据,但可通过调用 setfile、xattr、tag、photos.app 和 exiftool 等工具更新时间戳、标签、备注、相册归属及 spotlight 字段。
applescript 本身不能直接修改 macos 文件的完整元数据(比如 exif、iptc、xmp 或 spotlight 索引字段),但它可以调用系统工具协同完成关键更新任务,尤其是文件创建/修改时间、标签(tags)、备注(comments)、专辑归属(photos 应用内)等用户可见属性。核心思路是:applescript 做流程控制和应用交互,底层依赖 xattr、mdls、setfile、photos.app 的 applescript 词典或 exiftool(需预装)来执行实际写入。
更新文件基础时间戳与标签
macOS 文件的时间属性(创建时间、修改时间)和颜色标签可通过 AppleScript 调用命令行工具精准设置:
- 用
SetFile(来自 Xcode 命令行工具)修改创建/修改时间:do shell script "SetFile -d '06/01/2026 10:30:00' -m '06/01/2026 10:30:00' '/path/to/file.jpg'" - 用
xattr写入自定义扩展属性(如作者、项目编号):do shell script "xattr -w com.apple.metadata:kMDItemAuthors '(\"Alice\")' '/path/to/file.pdf'" - 用
tag命令(需brew install tag)批量打标签:do shell script "tag --add 'Urgent' '/path/to/file.docx'"
同步 Photos.app 中的照片元数据
AppleScript 可直接操作“照片”App,更新相册归属、关键字、标题、描述等——这些会反向写入照片的内部元数据并同步到系统 Spotlight:
- 先获取选中照片:
tell application "Photos" to set selectedItems to selection - 为每张照片设置关键字(即“标签”):
repeat with anItem in selectedItems<br> tell anItem to set keywords to {"Vacation", "2026"}<br>end repeat - 修改照片所在相册:
tell application "Photos"<br> set targetAlbum to album "Trip to Kyoto"<br> add selectedItems to targetAlbum<br>end tell
读取与验证元数据变更
更新后建议立即验证,避免静默失败。AppleScript 可调用系统命令读取结果:
- 查看所有 Spotlight 元数据字段:
do shell script "mdls -name kMDItemTitle -name kMDItemKeywords -name kMDItemDateAdded '/path/to/file.jpg'" - 检查扩展属性是否写入成功:
do shell script "xattr -l '/path/to/file.pdf'" - 若使用 exiftool,可读写标准图像元数据:
do shell script "exiftool -Title='New Title' -Keywords+=Work '/path/to/photo.jpg'"
注意事项与限制
部分元数据受系统保护或仅在特定上下文生效:
- Spotlight 字段(如
kMDItemContentTypeTree)通常只读,无法通过脚本直接写入 - Time Machine 和 iCloud 同步可能延迟反映元数据变更,建议等待几秒再验证
- Photos.app 的关键字更新需确保该 App 处于运行状态,且图库已解锁
- 批量处理大量文件时,加入
delay 0.1防止 AppleScript 调用过载











