2

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

 8 months ago
source link: https://www.techug.com/post/using-javascript-to-clean-up-my-200gb-icloud-i-made-an-unexpected-discovery-1052c1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK