Google Drive 如果你有很多檔案要下載,它會壓縮成 .zip 檔案,檔案大小較大,又會分成多個 .zip。
他的壓縮方式也不是典型 zip 的分割檔,而是可以獨立解壓縮,如果用 Finder 合併也會有資料夾被取代的問題。
這篇教學將會教大家輕鬆解壓縮不會遇到合併問題。(這篇會需要用到「終端機」,目前現在位置有你想要解壓縮的資料。)
步驟#
如果要合併的話也很簡單,先建立一個資料夾名為 combined:
mkdir combined
Unzip#
可以使用 unzip 解壓縮到指定的資料夾
unzip drive-download-20230812T155524Z-001.zip -d combined
這樣確實解壓縮了,但是這樣一次只有一個檔案,如果我有很多檔案怎麼辦?
這時候需要 for 指令,尋找指定的 pattern,把後面的數字(E.g. 001)變成 *,像這樣:
for archive in drive-download-20230812T155524Z-*.zip
do
unzip "$archive" -d combined
done
通常沒什麼問題就會解壓縮成功,但如果路徑有遇到其他字元(E.g. 日文字),就會遇到 Illegal byte sequence 問題:
checkdir error: cannot create combined/09. MURASAKi/SUSHI?? feat.+
Illegal byte sequence
unable to process 09. MURASAKi/SUSHI?? feat.+/pv.mp4.
像這個問題就必須使用 ditto 指令來解壓縮。
Ditto#
Ditto 是 macOS 的內建命令,說真的筆者在找的時候也沒有找到很多關於介紹它的指令,但根據說明它可以合併檔案,還同時可以壓縮和解壓縮。
如果要解壓縮可以這樣使用:
ditto -V -x -k --sequesterRsrc drive-download-20230812T155524Z-001.zip combined
結合剛剛前面所學的 for 指令,就可以組合這樣的指令出來:
for archive in drive-download-20230812T155524Z-*.zip
do
ditto -V -x -k --sequesterRsrc "$archive" combined
done
到這裡就沒有遇到其他問題,確認檔案也是完整。
後記#
其實我也第一次遇到 macOS 神奇的內建命令,功能似乎除了合併資料夾內的檔案以外,-x 會使用 CPIO 格式解壓縮,-k 則會把前者 CPIO 取代為 ZIP 格式。
目前大概研究到這邊,詳細可以看 man ditto 說明。