iMessage 附件正在悄悄占满你的 Mac
iMessage 附件会完整缓存在 Mac 的 ~/Library/Messages/Attachments 目录里。这里说清楚怎么查看它占用了多少空间,以及怎样安全地清理掉这些附件。
更多同类指南目前仅提供英文版本。 查看全部文章
如果 Messages 在你的 iPhone 和 Mac 之间通过 iCloud 同步——这是默认设置,也是大多数人的实际用法——那么任何人在对话里发给你的每一张照片、每一段视频、每一条语音信息、每一个文件,都会在这台 Mac 上本地缓存一份,而不只是存在手机上。
du -sh ~/Library/Messages/Attachments
经常分享照片和视频的群聊通常是这里的主要推手——光是一个活跃的群聊,一两年下来轻轻松松就能占掉好几 GB,而大多数人不止一个这样的群聊。
真实数据存在哪里
Messages 把存储拆成了一个数据库(文本和元数据)和一个独立的附件文件夹(媒体本身),结构和 Mail 有点像:
du -sh ~/Library/Messages/chat.db # message text, small relative to attachments
du -sh ~/Library/Messages/Attachments # every photo, video, voice memo — this is the big one
Attachments
是按嵌套的哈希文件夹结构组织的,而不是按对话分类,这就是为什么你没法直接浏览到“这个群聊专属的文件夹”——按对话逐个识别和删除,实际可行的办法是用应用自身的界面,下面会讲到。
最简单也最安全的办法:让 Messages 自动管理
系统设置 → Messages → iMessage → 信息记录(或者在 Messages 应用自己的设置里),有一个选项可以设置在 30 天或一年后自动删除消息和附件,而不是永远保留所有内容。对大多数人来说,这是杠杆效果最大的单个改动——把“永久”改成保留 1 年,就能限制住持续增长,之后什么都不用你再操心。
但这只对以后有效——它不会追溯清理掉已经积累了好几年的附件,那部分要靠下面这些步骤来处理。
清理已经积累下来的内容
逐个对话,在应用内操作(最安全、最精细):打开一个对话,用对话详情面板查看并删除单个体积较大的附件或照片,尤其是那些你已经不怎么活跃参与、但一直没退出的群聊。
系统层面,通过储存空间设置:系统设置 → 通用 → 储存空间,找到 Messages 分类,它会显示总大小,并提供一个“查看大型附件”或类似的按大小排序视图——不用手动打开每一个对话,就能最快找出占用最大的那几个。
直接从 Attachments 文件夹删除(最后手段,破坏性更大):从某种意义上说是安全的,因为 Messages 会重新生成内部引用,但可能会在旧对话里留下看起来损坏的占位图片,而不是把消息引用也一并干净地清除掉。对大多数人来说,上面那些应用内删除的方法更干净,也更推荐;这个选项主要是为了给按脚本批量清理某个日期之前的附件用的:
find ~/Library/Messages/Attachments -type f -mtime +365 -exec du -ch {} + | tail -1
# Review the total first; only proceed to an actual delete via the app's own
# retention settings above rather than deleting these files directly, to
# avoid the broken-placeholder issue.
专门说说语音信息
通过 Messages 发送的语音信息在 iOS 上有默认的过期机制(听过之后 2 分钟自动过期,除非点了“保留”),但这种过期行为并不总能干净地应用到 Mac 上的缓存方式,有些还是会照样积累下来。如果你经常发语音信息,值得专门检查一下:
find ~/Library/Messages/Attachments -iname "*.caf" -exec du -sh {} \; 2>/dev/null | sort -hr | head -10
什么是不能碰的
chat.db 是你真正的消息历史——文本内容、时间戳、已读回执。和体积庞大、存储成本一目了然的附件不同,这个数据库本身很小,不值得为了省空间去动它;删除或损坏它,会让你的对话历史彻底丢失,而对于纯本机设置来说,服务器端也没有恢复的办法。本文所有内容都刻意只针对
Attachments,不涉及数据库本身。
再重复一次这个规律
Messages 和 Mail、Photos 一起,成为第三个会悄悄积累真实同步数据、而不是一次性缓存的苹果应用大类——值得把它当作和本博客其他地方讲到的开发者构建缓存不同的一个类别来看待,因为对应的安全处理方式也不一样:开发者缓存可以随便删,而这三类要靠保留期设置和有选择的审查来管理。
DevCruft 是一款正在开发中的免费 Mac 应用,设计上会把 Messages 附件的大小和其他所有内容一起显示在地图上,让你在动手之前,就能判断值不值得专门跑一趟设置里去看。想第一时间知道它何时推出,欢迎加入候补名单。
Mail 里的类似情况,可以看看Mail 存储指南。