這是我常遇到的困擾 - 壓縮打包 .NET 專案時,packages、bin、obj 等目錄下的 DLL 檔常讓檔案大小暴增數十倍,而這些檔案可透過 NuGet Restore 或重新編譯產生,基本上不需要保留。如果能在壓縮時略過這些資料夾,預期可省下可觀的體積。

平時我都用免費且開源的 7-Zip 壓縮解壓縮(題外話,如果你己經「免費試用」試用期只有 40 天的 WinRAR 了十幾年,可考慮改用 7-Zip),認真查了,7-Zip GUI 在壓縮時雖然有個 Parameters 欄位:

官方說明指出但該選項只能填入 -m 壓縮參數,調整壓縮率、壓縮演算法等,不支援排除特檔案或資料夾,由 Superuser 討論也確認無法由 GUI 排除,所以要回歸使用命令列工具 7z.exe。範例如下:

X:\Works\MyProject>7z a MyProject.7z MyProject -mx7 -r -xr!bin -xr!obj -xr!packages

其中 mx7 指定壓縮率、r 代表包含子目錄、xr!bin 代表排除所有名為 bin 的子目錄,以此類推。(完整命令列參數列表可參考 Command Line Switches)。

實測結果,原本未排除這些目錄前壓縮檔為 32MB,排除後只需 500KB,相差 64 倍。而大小不到 1MB,才不易踩中電子郵件的附件容量上限或禁止包含DLL、EXE的限制。以上小技巧與大家分享~

【2018-02-09 補充】

若不想每次敲參數,可建立一個 proj-ignore.txt 檔,輸入:(一個項目一行)
bin
obj
packages

之後用 7z a MyProject.7z MyProject –mx7 –r –xr@proj-ignore.txt 即可重複使用排除清單。(感謝網友 agrozyme 回饋)


Comments

# by agrozyme

我覺得 7-ZIP 應該要支援 .7-zip-ignore 檔案來排除不要壓縮的檔案跟目錄~

# by Jeffrey

to agrozyme, 經你一說我查到可以用 -xr@ignore-list.txt 載入排除清單,這樣子不用每次敲參又更方便,感謝提醒。

# by Sheryl

感謝你,長知識了。

# by Ken

我會建議建一個batch在專案根目錄裡面,例如我就在 Projects 建一個 !7zproj.bat Batch 的內容如下 set e7z="C:\Program Files\7-Zip\7z.exe" %e7z% a "%~n1.7z" %1 -mx7 -r -xr!bin -xr!obj -xr!packages -xr!.git -xr!.vs 然後只要把專案目錄整個拖進去,就會建好同名的.7z檔了 雖然也可以整合到右鍵選單裡面,不過不太需要,也沒那麼常用

# by Jeffrey

to Ken, 好方法,感謝分享!

# by ALIEN.SUN

謝謝您分享,真的節省很多空間。^^

# by Ellis

感謝教學~

Post a comment