天天看點

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

作者:CSDN
使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

本文作者在綜合成本因素之下,決定用 JavaScript 腳本來清理一下自己的 iCloud,結果卻有了一個意外發現,即在 iCloud 中上傳同一個視訊和删除此視訊之後,iCloud 的空間并不一緻,這到底是什麼造成的呢?

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

本文為 CSDN 翻譯,未經允許禁止轉載。

作者 | Andy Kong 翻譯 | 蘇宓

出品 | CSDN(ID:CSDNnews)

最近,我收到了一封來自 Apple 的電子郵件,通知我的 iCloud 存儲空間已滿。

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

在郵件中,蘋果給了我一個選項,即付費更新可以得到更大的 iCloud 空間。不過,我發現 1TB 和 200GB 的成本相差了三倍,有些太貴了,這也促使我開始去尋找替代方案。當打開 iCloud 時,我發現照片占據了大部分的存儲空間(~127GB),是以我想我可以進入我的照片相冊并按檔案大小排序,然後适當删除,騰出一定的空間。

遺憾的是,蘋果裝置并不支援這一功能。不管是什麼原因,我還是想按檔案大小檢視我的照片。市面上有幾款應用程式可以檢視照片并突出顯示重複的照片,或檢視視訊并顯示檔案大小。唯一的問題是,已經上傳到 iCloud 的照片不會顯示在這些應用程式中,是以它們實際上并沒有什麼用處。另外,你真的希望随機應用掃描你所有的照片嗎?

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!
使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

用 JavaScript 作為解決方案

于是,我通路了 iCloud 網站并思考了有哪些可能性。我導航到“照片”->“媒體類型”->“視訊”菜單欄。

使用 JavaScript 清理我的 200GB 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 僅加載頁面上的元素,是以我将其制作成一個在計時器上運作的函數,以便新元素在滾動到其中時會突出顯示。它看起來是這樣的:

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

大于 20 秒的視訊會被紅框圈出來,更容易識别

要使用它,隻需打開 Javascript 控制台(右鍵單擊頁面 -> 檢查元素)并粘貼整個要點。現在,你可以輕松地從 iCloud 選擇多個大視訊并在删除之前下載下傳它們,将它們移動到長期存儲中:硬碟、其他雲存儲等。

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

謎團

我用這個腳本删除了 iCloud 中所有超過 30 秒的視訊。有趣的是,在我删除所有“大視訊”并下載下傳它們後,盡管隻下載下傳了 7GB 的視訊,但它卻從我的 iCloud 中清除了 ~55GB 的内容。謎底就在這裡。

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

所有下載下傳的視訊占用8GB磁盤空間

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

下載下傳 7GB 視訊後,iCloud 存儲空間從 199GB 減少至 143GB

不知為什麼,這 7GB 視訊在雲端占用的空間遠遠超過了我硬碟上的空間。有趣的是...

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

實驗 1

我想進一步測試一下。首先,我上傳了一段 4K 視訊。它占用了 281 MB。上傳後,我的存儲空間看起來是這樣的:

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

上傳 4K 視訊,iCloud 顯示已使用 145.33 GB

然後我下載下傳并删除了它。檔案仍然是 281 MB。這是之後的存儲情況:

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

4K 視訊被删除,iCloud 稱已使用 145.6 GB

删除 281MB 的視訊可騰出 ~270MB 的空間。這一點令人費解。其他較舊的視訊呢?

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

實驗 2

我想,也許較舊的視訊可能在 iCloud 中儲存了多個副本,是以我搜尋了我的視訊,看看能否找到一個占用大量存儲空間的較短視訊。我找到了一個有很多圖表的視訊,iCloud 說它占用了 128 MB。

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

較舊的大視訊,占用 128 MB

下載下傳時,檔案隻有 47 MB!

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

下載下傳的視訊檔案為 47 MB

這是我的 iCloud 存儲空間使用前後的對比:

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

删除舊視訊之前的 iCloud 存儲空間,已使用 145.29 GB

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

删除舊視訊後的 iCloud 存儲空間,已使用 145.12 GB,減少 170MB

是以,iCloud 顯示視訊為 128MB,我下載下傳後發現視訊實際為 48MB,而删除視訊後,我的可用存儲空間增加了約 170MB。真有意思!

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!

結論

我的存儲空間釋放量是删除檔案大小的 7 倍多,這很奇怪。更奇怪的是,大容量的舊視訊在 iCloud 中的存儲空間占用似乎比現實生活中要大得多。

你知道為什麼會出現這種情況嗎?

使用 JavaScript 清理我的 200GB iCloud,有了一個意外發現!