~/Library/Containers 不是缓存文件夹,仅这一点就解决了大半问题。里面放的是沙盒应用的数据:设置、数据库、下载的媒体。删掉你还在用的应用的容器,等于把它清零并带走数据。删掉去年就卸载的应用的容器,则只是腾出空间,什么也不损失。
基本原则:把每个容器和你还装着的应用一一对上。背后已经没有应用的才删,其余留着。
快速回答
- 按体积列出:
du -sh ~/Library/Containers/* | sort -h | tail -20。 - 读文件夹名里的 bundle identifier,找出对应的应用。
- 只把应用已从 Mac 上消失的容器移入废纸篓。
- 应用还在用,就在应用内部清理已存的媒体。
- 对
~/Library/Group Containers更谨慎:多个组件共用它。 - 动容器之前先退出应用,废纸篓放一天再清空。
容器是什么
macOS 让沙盒应用在专属的受限主目录里运行。所有 App Store 应用都是这样,商店之外的许多应用也是。这个私有主目录就是容器。
打开一个看看,结构很眼熟:
~/Library/Containers/com.apple.Safari/
Data/
Library/
Application Support/
Caches/
Preferences/
Documents/
Desktop/ -> 指向你真实桌面的链接
Downloads/ -> 指向你真实下载文件夹的链接
应用把 Data 当作自己的主目录。其中的 Library 装着只属于它的东西。Desktop 和 Documents 这两项是指向你真实文件夹的符号链接,应用只有在获得相应权限时才能跟过去。
这个细节回答了大家最担心的问题:删除容器删掉的是链接,而不是链接指向的文件。你的文稿仍在原来的位置。
删掉之后会失去什么
属于应用的那部分是真数据。
- 该应用的账号配置和登录状态;
- 它的设置和窗口状态;
- 它建立的数据库,比如邮件索引或消息记录;
- 它下载并归入自身存储的媒体。
找不到容器的应用会像刚装好一样启动。对于从服务器同步的笔记应用,代价是重新下载。对于把一切都留在本地的应用,代价就是内容本身。
哪些容器可以放心删
安全的是那些应用已经不在你 Mac 上的容器。
du -sh ~/Library/Containers/* | sort -h | tail -20
拿出每个大文件夹,读它的名字。com.company.appname 会告诉你厂商和应用。然后看这个应用是否还在 /Applications 里。如果不在,这个文件夹就是残留:应用被删了,容器留下了。移入废纸篓。
如果应用还装着,就把容器留在原处,从应用内部去解决体积。聊天工具、邮件客户端和浏览器都提供已存媒体与缓存的设置,走这条路能保住账号配置。
Group Containers 的规则不一样
~/Library/Group Containers 存放的是声明同一个 App Group 的组件之间共享的数据:应用和它的扩展、应用和它的小组件、套件和它的辅助程序。一个文件夹可能支撑着好几块看得见的软件。
规则相同,但影响面更大。删掉你已经不用的软件的群组容器没有问题。删掉当前应用与其扩展共用的那个,会同时破坏两者的共享状态,而应用通常没法告诉你原因。
最大的那些容器里装了什么
有几个名字几乎出现在每份列表里。
- 聊天应用。 收到的照片和视频堆在容器里。这类应用大多有存储页面,可以在不动账号的前提下清掉旧媒体。
- 邮件。 下载附件的副本留在容器里,多年间悄悄变大。
- Safari。 它的缓存在
com.apple.Safari里,而不在~/Library/Caches,所以在缓存清单里看起来像是缺席。 - 只试过一次的应用。 几十个小文件夹,来自几年前就消失的软件。单看无所谓,加起来是好几百 MB。
不出事的顺序
- 把容器按体积排序,只看列表顶部。
- 逐个判断对应的应用是否还装着。
- 应用在运行就先退出。
- 只把无主的容器移入废纸篓。
- 正常用一天,再清空废纸篓。
- 对保留的应用,打开它自己的设置,从那里清掉已存的媒体。
第 2 步就是全部工作。背后什么都没有的容器值得删,背后还有东西的值得留。
总结
把 ~/Library/Containers 当成应用数据,因为它就是。问题从来不是笼统的”容器能不能删”,而是某个具体容器背后是否还有应用。没有就移入废纸篓;有就进到应用里清掉它存的东西,容器留在 macOS 放它的地方。
常见问题
Mac 上的 Containers 能安全删除吗?
只有你已经不再拥有的应用可以。容器里放的是沙盒应用的数据:设置、它管理的文稿,以及下载的内容。删掉已安装应用的容器,等于把它退回全新状态并带走数据。删掉几个月前已卸载应用的容器,则只是腾出空间,没有代价。
Mac 上的 ~/Library/Containers 文件夹是什么?
这是 macOS 为每个在沙盒中运行的应用存放专属主目录的地方,涵盖所有 App Store 应用和许多其他应用。每个子文件夹以应用的 bundle identifier 命名,里面的 Data 文件夹就像一个只属于该应用的小型主目录。
删除容器会删掉我的文稿吗?
容器 Data 文件夹里的桌面、文稿、下载这几项是指向你真实文件夹的符号链接,删除容器删掉的是链接,文件仍在原处。真正失去的是应用自己存放在容器里的数据:设置、数据库,以及它下载到那里的内容。
Containers 和 Group Containers 有什么区别?
容器属于一个应用。~/Library/Group Containers 里的群组容器由声明同一个 App Group 的应用共享,应用就是通过它与自己的扩展和小组件通信。删除群组容器可能一次性破坏多个组件的共享状态,所以要比删单个容器更谨慎。
怎么找出已卸载应用留下的容器?
把 ~/Library/Containers 里的 bundle identifier 和你还装着的应用对照一遍。名字对应的应用已经不在“应用程序”里,那这个文件夹就是残留,可以移入废纸篓。先按体积排序:大多数残留很小,只有少数值得花时间。
为什么某个容器有好几个 GB?
聊天应用把收到的图片视频放在容器里,邮件保留下载附件的副本,Safari 把缓存放在那里。这些情况通常可以打开应用自己的设置,从里面清掉已存的媒体,比连账号配置一起删掉容器安全得多。