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

本文作者在综合成本因素之下,决定用 JavaScript 脚本来清理一下自己的 iCloud,结果却有了一个意外发现,即在 iCloud 中上传同一个视频和删除此视频之后,iCloud 的空间并不一致,这到底是什么造成的呢?

原文:https://andykong.org/blog/icloudconfusion

本文为 CSDN 翻译,未经允许禁止转载。

作者 | Andy Kong   翻译 | 苏宓

出品 | CSDN(ID:CSDNnews)

最近,我收到了一封来自 Apple  的电子邮件,通知我的 iCloud 存储空间已满。

在邮件中,苹果给了我一个选项,即付费升级可以得到更大的 iCloud 空间。不过,我发现 1TB 和 200GB 的成本相差了三倍,有些太贵了,这也促使我开始去寻找替代方案。当打开 iCloud 时,我发现照片占据了大部分的存储空间(~127GB),所以我想我可以进入我的照片相册并按文件大小排序,然后适当删除,腾出一定的空间。

遗憾的是,苹果设备并不支持这一功能。不管是什么原因,我还是想按文件大小查看我的照片。市面上有几款应用程序可以查看照片并突出显示重复的照片,或查看视频并显示文件大小。唯一的问题是,已经上传到 iCloud 的照片不会显示在这些应用程序中,因此它们实际上并没有什么用处。另外,你真的希望随机应用扫描你所有的照片吗?

用 JavaScript 作为解决方案

于是,我访问了 iCloud 网站并思考了有哪些可能性。我导航到“照片”->“媒体类型”->“视频”菜单栏。

可以看到,每个视频都有一个相应的时长框——只要它是 HTML 元素,我们就可以使用 JS 来搜索和筛选它们。我发现每个时长框都有 video-text-badge 类。这样,我们就可以在页面中找到所有的视频,按其持续时间排序,并高亮显示超过某个阈值的视频。下面是代码:

// From the blog post andykong.org/blog/icloudconfusion/

function boxTops(){
    HTMLCollection.prototype.toArray = function() { return Array.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
    function drawBox(element) {
      if (element instanceof HTMLElement) {
        element.style.border = "2px solid red";
      }
    }

    thresh = 30 // Min seconds to highlight a video
    for (let i = 0; i < sortedD.length; i++) {
      if (sortedD[i] > thresh){
        drawBox(sortedA[i])
      }
    }
}

// Continuously highlight big videos
setInterval(boxTops, 500)

因为 iCloud 仅加载页面上的元素,所以我将其制作成一个在计时器上运行的函数,以便新元素在滚动到其中时会突出显示。它看起来是这样的:

大于 20 秒的视频会被红框圈出来,更容易识别

要使用它,只需打开 Javascript 控制台(右键单击页面 -> 检查元素)并粘贴整个要点。现在,你可以轻松地从 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 中的存储空间占用似乎比现实生活中要大得多。

你知道为什么会出现这种情况吗?

本文文字及图片出自 CSDN

余下全文(1/3)
分享这篇文章:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注