使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!

本文作者在综合成本因素之下,决定用 JAVA 脚本来清理一下自己的 iCloud,结果却有了一个意外发现,即在 iCloud 中上传同一个视频和删除此视频之后,iCloud 的空间并不一致,这到底是什么造成的呢?
原文:https://andykong.org/blog/icloudconfusion
作者 | Andy Kong 翻译 | 苏宓
出品 | CSDN(ID:CSDNnews)
最近,我收到了一封来自 Apple 的电子邮件,通知我的 iCloud 存储空间已满 。

使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!

文章插图
在邮件中,苹果给了我一个选项,即付费升级可以得到更大的 iCloud 空间 。不过,我发现 1TB 和 200GB 的成本相差了三倍,有些太贵了 , 这也促使我开始去寻找替代方案 。当打开 iCloud 时 , 我发现照片占据了大部分的存储空间(~127GB),所以我想我可以进入我的照片相册并按文件大小排序,然后适当删除 , 腾出一定的空间 。
遗憾的是 , 苹果设备并不支持这一功能 。不管是什么原因 , 我还是想按文件大小查看我的照片 。市面上有几款应用程序可以查看照片并突出显示重复的照片 , 或查看视频并显示文件大小 。唯一的问题是 , 已经上传到 iCloud 的照片不会显示在这些应用程序中,因此它们实际上并没有什么用处 。另外,你真的希望随机应用扫描你所有的照片吗?
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!

文章插图
用 Java 作为解决方案
于是,我访问了 iCloud 网站并思考了有哪些可能性 。我导航到“照片”->“媒体类型”->“视频”菜单栏 。
使用 JavaScript 清理我的 200GB 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 仅加载页面上的元素,所以我将其制作成一个在计时器上运行的函数,以便新元素在滚动到其中时会突出显示 。它看起来是这样的:
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!

文章插图
大于 20 秒的视频会被红框圈出来,更容易识别
要使用它,只需打开 Java 控制台(右键单击页面 -> 检查元素)并粘贴整个要点 。现在,你可以轻松地从 iCloud 选择多个大视频并在删除之前下载它们,将它们移动到长期存储中:硬盘、其他云存储等 。
谜团
我用这个脚本删除了 iCloud 中所有超过 30 秒的视频 。有趣的是,在我删除所有“大视频”并下载它们后,尽管只下载了 7GB 的视频,但它却从我的 iCloud 中清除了 ~55GB 的内容 。谜底就在这里 。
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!

文章插图
所有下载的视频占用8GB磁盘空间
下载 7GB 视频后,iCloud 存储空间从 199GB 减少至 143GB
不知为什么 , 这 7GB 视频在云端占用的空间远远超过了我硬盘上的空间 。有趣的是...
实验 1
我想进一步测试一下 。首先,我上传了一段 4K 视频 。它占用了 281 MB 。上传后,我的存储空间看起来是这样的:
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!


推荐阅读