macOS 合併 Google Drive 壓縮下載
前幾天從朋友分享的 Google Drive 連結,下載一大包檔案,因為檔案很大,超過 2GB,所以 Google 預設幫我分割檔案。因為之前都用 Windows 電腦,所以也沒發現什麼不妥,就很直覺的把檔案下載下來之後準備解壓縮。
沒想到在 macOS 上解壓縮居然跟 Windows 上不一樣,因為之前都很直覺用 WinRAR 直接解開,並不會有資料夾覆蓋的問題,但是在 macOS 上,會多出很多不同的資料夾,檔案被分散開了,整理起來很不方便。於是開始線上到處搜尋,到處找解法,卻發現不知道如何下關鍵字,內容好像也很少,最後總算找到兩篇之後1 2,為了怕以後忘記,就把這篇作為部落格重開的第一篇技術文章。
步驟
建立資料夾
先建立一個資料夾,作為等等解壓縮後放結果的地方,這邊就命名為 combined
mkdir combined
Unzip
透過 unzip
指令,將 zip 檔解開至指定的資料夾
unzip drive-20231126T090225Z-001.zip -d combined
這樣就可以順利解開囉! 不過你會發現,咦?這樣只解開了一個啊,那我如果有幾十個檔案,不就要手動輸入幾十次指令?
這時候就可以使用 for
指令,搭配萬用字元 *
來進行多個檔案解壓縮,具體的指令如下:
for archive in drive-20231126T090225Z-*.zip
do
unzip "$archive" -d combined
done
通常到這邊就結束拉,不過事情總是沒那麼簡單,俗話說得好,不出意外的話就要出意外了如果遇到壓縮檔中含有 non-ASCII 檔名 (e.g. 中文,日文等),就會遇到 Illegal byte sequence
錯誤。
checkdir error: cannot create combined/�����?��+
Illegal byte sequence
unable to process �����?��+/�����������-��/�����+��+�������+����Ѣަ� �������������������?�뮵�ֵ��ަ���� (�����ի�).pdf.
checkdir error: cannot create combined/�����?��+
Illegal byte sequence
unable to process �����?��+/�����������-��/�+�����֦�֢���.pdf.
那怎麼辦?這時候就要請出另一個指令,ditto
來協助了。
Ditto
ditto
是 macOS 中的內建指令,根據 man ditto
中的說明,這個指令除了可以解壓縮,合併之外,還可以進行檔案的複製 (跟 cp
指令類似)
那前面遇到 non-ASCII 的問題,透過 ditto
指令就可以處理:
ditto -V -x -k --sequesterRsrc drive-20231126T090225Z-001.zip combined
結合 for
之後,最後完整的指令如下:
for archive in drive-20231126T090225Z-*.zip
do
ditto -V -x -k --sequesterRsrc "$archive" combined
done
執行之後,一切順利,檔案成功解壓縮,名稱也都正確,也沒有出現一堆多餘的資料夾。