本文作者在综合成本因素之下,决定用 JAVA 脚本来清理一下自己的 iCloud,结果却有了一个意外发现,即在 iCloud 中上传同一个视频和删除此视频之后,iCloud 的空间并不一致,这到底是什么造成的呢?
原文:https://andykong.org/blog/icloudconfusion
作者 | Andy Kong 翻译 | 苏宓
出品 | CSDN(ID:CSDNnews)
最近,我收到了一封来自 Apple 的电子邮件,通知我的 iCloud 存储空间已满。
在邮件中,苹果给了我一个选项,即付费升级可以得到更大的 iCloud 空间。不过,我发现 1TB 和 200GB 的成本相差了三倍,有些太贵了,这也促使我开始去寻找替代方案。当打开 iCloud 时,我发现照片占据了大部分的存储空间(~127GB),所以我想我可以进入我的照片相册并按文件大小排序,然后适当删除,腾出一定的空间。
遗憾的是,苹果设备并不支持这一功能。不管是什么原因,我还是想按文件大小查看我的照片。市面上有几款应用程序可以查看照片并突出显示重复的照片,或查看视频并显示文件大小。唯一的问题是,已经上传到 iCloud 的照片不会显示在这些应用程序中,因此它们实际上并没有什么用处。另外,你真的希望随机应用扫描你所有的照片吗?
用 Java 作为解决方案
于是,我访问了 iCloud 网站并思考了有哪些可能性。我导航到“照片”->“媒体类型”->“视频”菜单栏。
可以看到,每个视频都有一个相应的时长框——只要它是 html 元素,我们就可以使用 JS 来搜索和筛选它们。我发现每个时长框都有 video-text-badge 类。这样,我们就可以在页面中找到所有的视频,按其持续时间排序,并高亮显示超过某个阈值的视频。下面是代码:
// From the blog post andykong.org/blog/icloudconfusion/
functionboxTops{
HTMLCollection.prototype.toArray = function{ returnArray.from(this); }
// Select all the time badges and parse out their total runtime in seconds
a = document.getElementsByClassName('video-text-badge').toArray
b = a.map((x) =>x.innerText)
c = b.map((y) =>y.split(":").map((x) =>parseInt(x)))
d = c.map((x) =>x[0]*60+ x[1])
// Sort the badges HTML array and badges runtime together
indices = Array.from(a.keys)
indices.sort( (x,y) =>d[x] - d[y])
sortedA = indices.map(i=>a[i])
sortedD = indices.map(i=>d[i])
// Function that boxes an element
functiondrawBox(element) {
if(element instanceofHTMLElement) {
element.style.border = "2px solid red";
}
}
thresh = 30// Min seconds to highlight a video
for(leti = 0; i < sortedD.length; i++) {
if(sortedD[i] > thresh){
drawBox(sortedA[i])
}
}
}
// Continuously highlight big videos
setInterval(boxTops, 500)
因为 iCloud 仅加载页面上的元素,所以我将其制作成一个在计时器上运行的函数,以便新元素在滚动到其中时会突出显示。它看起来是这样的:
大于 20 秒的视频会被红框圈出来,更容易识别
要使用它,只需打开 Java 控制台(右键单击页面 -> 检查元素)并粘贴整个要点。现在,你可以轻松地从 iCloud 选择多个大视频并在删除之前下载它们,将它们移动到长期存储中:硬盘、其他云存储等。
谜团
我用这个脚本删除了 iCloud 中所有超过 30 秒的视频。有趣的是,在我删除所有“大视频”并下载它们后,尽管只下载了 7GB 的视频,但它却从我的 iCloud 中清除了 ~55GB 的内容。谜底就在这里。
所有下载的视频占用8GB磁盘空间
下载 7GB 视频后,iCloud 存储空间从 199GB 减少至 143GB
不知为什么,这 7GB 视频在云端占用的空间远远超过了我硬盘上的空间。有趣的是...
实验 1
我想进一步测试一下。首先,我上传了一段 4K 视频。它占用了 281 MB。上传后,我的存储空间看起来是这样的:
上传 4K 视频,iCloud 显示已使用 145.33 GB
然后我下载并删除了它。文件仍然是 281 MB。这是之后的存储情况:
4K 视频被删除,iCloud 称已使用 145.6 GB
删除 281MB 的视频可腾出 ~270MB 的空间。这一点令人费解。其他较旧的视频呢?
实验 2
我想,也许较旧的视频可能在 iCloud 中保存了多个副本,因此我搜索了我的视频,看看能否找到一个占用大量存储空间的较短视频。我找到了一个有很多图表的视频,iCloud 说它占用了 128 MB。
较旧的大视频,占用 128 MB
下载时,文件只有 47 MB!
下载的视频文件为 47 MB
这是我的 iCloud 存储空间使用前后的对比:
删除旧视频之前的 iCloud 存储空间,已使用 145.29 GB
删除旧视频后的 iCloud 存储空间,已使用 145.12 GB,减少 170MB
因此,iCloud 显示视频为 128MB,我下载后发现视频实际为 48MB,而删除视频后,我的可用存储空间增加了约 170MB。真有意思!
结论
我的存储空间释放量是删除文件大小的 7 倍多,这很奇怪。更奇怪的是,大容量的旧视频在 iCloud 中的存储空间占用似乎比现实生活中要大得多。
你知道为什么会出现这种情况吗?