藥不藥來當工程師一個不務正業的藥師,誤打誤撞來當了前端工程師。斜槓工程師的人生!

macOS 合併 Google Drive 壓縮下載

發佈於 最後更新於
4 min read

前幾天從朋友分享的 Google Drive 連結,下載一大包檔案,因為檔案很大,超過 2GB,所以 Google 預設幫我分割檔案。因為之前都用 Windows 電腦,所以也沒發現什麼不妥,就很直覺的把檔案下載下來之後準備解壓縮。

沒想到在 macOS 上解壓縮居然跟 Windows 上不一樣,因為之前都很直覺用 WinRAR 直接解開,並不會有資料夾覆蓋的問題,但是在 macOS 上,會多出很多不同的資料夾,檔案被分散開了,整理起來很不方便。於是開始線上到處搜尋,到處找解法,卻發現不知道如何下關鍵字,內容好像也很少,最後總算找到兩篇之後1 2,為了怕以後忘記,就把這篇作為部落格重開的第一篇技術文章。

步驟

建立資料夾

先建立一個資料夾,作為等等解壓縮後放結果的地方,這邊就命名為 combined

bash
mkdir combined

Unzip

透過 unzip 指令,將 zip 檔解開至指定的資料夾

bash
unzip drive-20231126T090225Z-001.zip -d combined

這樣就可以順利解開囉! 不過你會發現,咦?這樣只解開了一個啊,那我如果有幾十個檔案,不就要手動輸入幾十次指令?

這時候就可以使用 for 指令,搭配萬用字元 * 來進行多個檔案解壓縮,具體的指令如下:

bash
for archive in drive-20231126T090225Z-*.zip
do
  unzip "$archive" -d combined
done

通常到這邊就結束拉,不過事情總是沒那麼簡單,俗話說得好,不出意外的話就要出意外了如果遇到壓縮檔中含有 non-ASCII 檔名 (e.g. 中文,日文等),就會遇到 Illegal byte sequence 錯誤。

bash
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 指令就可以處理:

bash
ditto -V -x -k --sequesterRsrc drive-20231126T090225Z-001.zip combined

結合 for 之後,最後完整的指令如下:

bash
for archive in drive-20231126T090225Z-*.zip
do
  ditto -V -x -k --sequesterRsrc "$archive" combined
done

執行之後,一切順利,檔案成功解壓縮,名稱也都正確,也沒有出現一堆多餘的資料夾。

Reference

  1. macOS 合併 Google Drive 壓縮下載 - Jerry Yang's Blog
  2. Merge/combine multiple downloaded ZIP-files from Google Drive on Mac [closed]
Copyright 2020-2024 - AzureBlue ALL RIGHTS RESERVED.