

分享幾個常用的 7-Zip 壓縮與解壓縮命令
source link: https://blog.miniasp.com/post/2021/07/07/Useful-7-Zip-7z-CLI-Command-Options
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我們最近幾年幾乎所有案子都導入 CI/CD,把所有能自動化的工作全部都指令化,所以只要公司需要開發時期用的測試機,或是客戶需要安裝主機,通常都可以在 10 分鐘內搞定所有環境與設定。今天這篇文章我要來分享幾個常用的 7-Zip 命令與參數,因為 7-Zip 在第一次使用 7z
命令的時候,他的使用方式比較沒那麼直覺,所以寫成文章供未來查表參考之用。
安裝 7-Zip 工具
一如往常的,我幾乎都使用 Chocolatey 進行安裝 7-Zip 套件:
choco install 7zip -y
請注意要輸入
7zip
才是正確的套件名稱喔,這裡的7
與zip
中間不能加上 Dash 符號 (-
)!
你也可以用微軟最近推出的 Windows Package Manager CLI 安裝 7-Zip 工具
winget install 7zip
常用的壓縮檔案命令與參數
-
壓縮整個資料夾,而且壓縮檔案中的第一層就是該資料夾
這意味著壓縮檔中第一層目錄中沒有檔案,只有一個資料夾!
會這樣壓縮,通常是因為「解壓縮的人」經常會使用「解壓縮到這裡」的方式進行解壓縮,如果他把壓縮檔放在「桌面」上,解壓縮的時候就會看到桌面上只有一個檔案,看起來比較乾淨。
壓縮
dir1\
資料夾下所有檔案,而且壓縮檔案中會看到dir1
這個資料夾!7z a "dir1.zip" "dir1\"
如果你用以下命令壓縮,將會在壓縮檔中看到
dir1
與dir2
資料夾等路徑!7z a "dir1.zip" "dir1\dir2\"
7-Zip 預設會壓縮該目錄與所有子目錄的所有檔案!
如果要壓縮成
*.7z
格式,不用特別下參數,直接設定好壓縮檔的副檔名即可,例如:7z a "dir1.7z" "dir1\"
注意:7-Zip 支援
*.rar
的解壓縮,但不能使用 RAR 格式進行,因為 RAR 壓縮格式有專利保護! -
壓縮整個資料夾,而且壓縮檔案中第一層就是該資料夾下所有檔案與子資料夾
我個人比較喜歡這樣壓縮檔案,許多雲端平台在上傳檔案部署的時候,也會要求要用這種方式壓縮才能正常部署。
壓縮
dir1\
資料夾下所有檔案,壓縮檔案不會看到dir1
這個資料夾,只會看到裡面的檔案與子資料夾!7z a "dir1.zip" "dir1\*"
如果你用以下命令壓縮,將會看不到
dir1
與dir2
資料夾!7z a "dir1.zip" "dir1\dir2\*"
-
壓縮整個資料夾,並且保留現有檔案的完整路徑
由於 7-Zip 壓縮過的檔案不會保留「磁碟代號」,你唯一能做的只能保留「路徑」部份而已。
你可以先進入磁碟的根目錄,然後用上述第 1 種方法來壓縮檔案:
CD /D G:\ 7z a "dir2.zip" "sub1\dir1\dir2"
-
只壓縮整個資料夾下的特定檔案類型
如果要壓縮限定特定類型的檔案,可以先加上
-r
參數,再加上不同的檔名樣式 (File Patterns) 就可以找出檔案並加入壓縮檔:7z a "dir1.zip" "dir1\" -r "dir1\*.aspx"
7z a "dir1.zip" "dir1\" -r "dir1\*.aspx" "dir1\*.dll"
如果要排除特定類型的檔案不要進壓縮檔,可以這樣寫:
7z a dir1.zip "dir1\" "-xr!*.pdb" "-xr!web.config"
-
將目前資料夾下的所有檔案壓縮到上一層目錄
如果你想壓縮當前目錄,但是壓縮檔不要出現在本資料夾,可以這樣寫:
7z a "..\dir1.zip"
不加上任何參數,預設就是把當前目錄全部都壓縮起來,但請記得壓縮檔不要放在當前目錄下!
常用的解壓縮檔案命令與參數
-
解壓縮到當前目錄
請確保不會弄亂你的資料夾才能用這個方法,因為解出來的東西會跟壓縮檔放在一起!
7z x "dir1.zip"
-
解壓縮到指定輸出目錄
7z x "dir1.zip" -o"dir1"
請記得習慣在
-o
參數後面加上"
雙引號,這樣就可以確保資料夾路徑中有空白字元也可以正常運作!7z x "dir1.zip" -o"C:\Program Files\"
注意:在
-o
與Path
中間不能有任何空白字元! -
只解壓縮特定檔案類型到指定輸出目錄
以下這個解壓縮命令會保留這些檔案的路徑在指定輸出目錄!
7z x "dir1.zip" -o"dir1" -r "*.dll"
注意:7-Zip 並非使用 Windows 的 system wildcard parser,他並不會真的去比對有沒有這些系統檔案,而是傳入字串到
7z
命令中,讓 7-Zip 去比對所有檔案! -
擷取特定檔案類型到指定輸出目錄
這裡不說「解壓縮」而說「擷取」是因為 7-Zip 有個參數
e
就是Extract
(擷取) 的意思。這個參數最大的特點就是【取出的檔案不會保留壓縮檔中的目錄結構】,專門用來讓你取出壓縮檔案中的一個或多個檔案。以下這個擷取命令會取出所有
*.js
檔案到指定輸出目錄!7z e "dir1.zip" -o"dir1" -r "*.js"
如果壓縮檔中檔案很多,很有可能會遇到存在於不同目錄,但是檔名相同的狀況,此時就會出現檔名衝突問你要不要覆蓋的提示。如果不想提示直接覆蓋,可以加上
-y
參數:7z e "dir1.zip" -o"dir1" -r "*.dll" -y
-
解壓縮時略過壓縮檔中的第一層目錄並指定輸出目錄
7-Zip 不像
tar
有--strip-components=
這種強大的進階用法,所以使用上比較沒那麼靈活,需要搭配批次檔進行實作!如果是 PowerShell 的話,可以直接這樣執行:
7z x .\MyWebsite.zip cd "MyWebsite" mv "*" "C:\Inetpub\wwwroot" cd .. rmdir "MyWebSite"
如果是 Command Prompt 的話,建議安裝 Chocolatey 上有個 UnxUtils 套件,裡面有超多好用的 Linux 常見命令的 Windows 版本,其中當然包含了
mv
命令!choco install unxutils -y
其他 7-Zip 進階用法
-
壓縮檔案時包含解壓縮密碼
壓縮的時候設定一個密碼(
-p
),解壓縮檔案的時候必須輸入!7z a "dir1.zip" "dir1/" -p"1q2w3e4r"
壓縮的時候設定一個密碼(
-p
),並且將壓縮檔的 Header 資訊一併加密,也就是連檔名都一起加密,開啟壓縮檔的時候就要先輸入密碼才知道內容!(僅支援*.7z
壓縮檔格式)7z a "dir1.7z" "dir1/" -p"1q2w3e4r" -mhe
解壓縮一個加密過的壓縮檔到指定輸出目錄
7z x "dir1.7z" -o"dir1/" -p"1q2w3e4r"
-
列出所有檔案清單
我們在自動化的過程中可能會需要先知道壓縮檔中有什麼檔案,此時可以利用
7z
的l
(List) 命令達成這個目的。7z l "dir1.zip"
-
顯示壓縮檔中完整的技術資訊
你可以從中看出每個檔案的完整資訊,包含 CRC 與各種檔案屬性的細節,非常 Geek 的內容
7z l "dir1.zip" -slt
-
連同壓縮 NTFS 的 alternate streams 資訊到壓縮檔中 (
-sns
)我在 2008 年有介紹過這個東西 ▶ 介紹好用工具:Streams 讓你瞭解神秘的 NTFS 檔案系統
壓縮檔案時包含 NTFS Alternate Streams
7z a a.wim -sns *.txt
7-Zip 解壓縮的時候預設就會包含 NTFS Alternate Streams 到檔案中
7z x a.wim
不想讓 7-Zip 解壓縮的時候包含 NTFS Alternate Streams 可以加上
-sns
參數7z x a.wim -sns-
列出壓縮檔案內容時包含 NTFS Alternate Streams 資訊 (加上
-sns
參數)7z l a.wim -sns
Recommend
-
14
-
10
我們在「前言篇」有提到大腦有分「專注」模式和「發散」模式,這篇我們將更詳盡的描述大腦如何運作,掌握要點來幫助你學習更有效率。 大腦的兩種思考模式...
-
15
PowerShell 壓縮 ZIP 檔-黑暗執行緒 同事在 Windows 10 高高興興寫了壓縮檔案的 PowerShell 小工具,丟上伺服器執行時踢到鐵板。 PowerShell 有個
-
9
最近熱愛 low-code 或 no-code 的解決方案,簡單拖拉幾個設定,或是複製之前寫好的 JSON,就可以快速完成一個日常的自動化工作,減少越來越多的人工操作,重點是幾乎不用花錢,也不用花心思在部署上。今天我要來整理幾個
-
7
我每隔幾年我就會遇到一次 non-Unicode 的編碼問題,真的不常見,但這些年來也處理過無數次了,每次都被搞的很煩。最近在 Linux 環境又遇到棘手的編碼問題,檔案內容是從 ISO-8859-1 (Latin-1) 字集的 Sybase ASE 資料庫轉出,所以編碼是 IS...
-
8
介紹幾個 .NET SDK、.NET CLI 與 .NET runtime 執行時的好用環境變數我在 Environment variables used by .NET SDK, .NET CLI, and .NET...
-
19
用在 IoT 裝置上的壓縮演算法 Heatshrink 在「Heatshrink – An ultra-lightweight compression library for em...
-
17
PostgreSQL 14 支援的 LZ4 壓縮 在 Hacker News 上看到 PostgreSQL 14 新支援的
-
12
幾個有興趣的前端框架 如果你像我一樣是一個對 UI 開發不那麼在行,或是無法花太多時間在 UI 設計的 Web 開發者,但卻想能夠快速建立一個可用的 UI 介面,那麼最快的方法就是借重別人寫好的前端框架。 這...
-
10
內嵌 .js GZIP 壓縮檔-黑暗執行緒 繼續我的 HTML 文件檔計劃。封裝文件檔的另一項重點是把所有內容打包成單一 .html 檔 (高年級同學可能還記得 I...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK