本文作者在綜合成本因素之下,決定用 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 中的存儲空間占用似乎比現實生活中要大得多。
你知道為什麼會出現這種情況嗎?