TIPS–7-Zip 壓縮時略過特定目錄或檔案
7 |
這是我常遇到的困擾 - 壓縮打包 .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
感謝教學~