Linux 環境如何壓縮和解壓縮文件
打包和壓縮的區別
打包和壓縮是不同的概念,打包是將多個文件/文件夾合併爲一個文件,而壓縮則是通過壓縮算法來減小文件體積。要注意的是,打包並不意味着減小體積,壓縮也不意味着要把文件合併到一起。儘管大部分時候我們習慣了“打包並壓縮”,有時候並不需要對它們進行區分,但瞭解它們的區別有助於更好地認知 Linux 系統中的相關命令。
打包和解包(tar)
只打包不壓縮
使用tar命令將多個文件/文件夾打包爲一個文件:
sh
tar -cvf archive.tar file1 file2 file3其中archive.tar打包後的文件,file1, file2 和 file3是要打包的文件/文件夾。
針對每一個被打包的文件,會有輸出:
sh
a file1
a file2
a file3打包並壓縮
tar命令也集成了壓縮功能,可以使用 gzip 或 bzip2 壓縮算法,對應的參數分別是-z和-j:
sh
# 使用gzip壓縮,文件名後面加上 .gz
tar -zcvf archive.tar.gz file1 file2 file3
# 使用gzip壓縮,文件名後綴使用 .tgz
tar -zcvf archive.tgz file1 file2 file3
# 使用bzip2壓縮,文件名後面加上 .bz2
tar -jcvf archive.tar.bz2 file1 file2 file3
# 使用bzip2壓縮,文件名後綴使用 .tbz2
tar -jcvf archive.tbz2 file1 file2 file3解包
sh
tar -xvf archive.tar如果需要解包到指定目錄,則加上-C參數:
sh
tar -xvf archive.tar -C /path/to/destination/directory如果有壓縮的話,加上對應的-z或者-j參數即可:
sh
# 解壓縮gzip格式的壓縮包
tar -zxvf archive.tar.gz
# 解壓縮bzip2格式的壓縮包
tar -jxvf archive.tar.bz2壓縮和解壓縮文件
gzip壓縮
gzip命令用來壓縮文件,值得注意的是,它會覆蓋原文件,即使用gzip命令壓縮後,原文件會消失:
sh
# file會消失,新產生一個file.gz
gzip file如果將gzip直接應用到目錄上沒有任何效果,因爲gzip只能壓縮文件,而不能壓縮目錄。但可以使用-r參數來遞歸壓縮目錄中的所有文件:
sh
# dirname目錄中的所有文件都會被壓縮,每個文件生成一個對應的.gz文件,原文件消失
gzip dirnamegzip解壓縮
解壓單個文件,使用-d參數:
sh
# 將file.gz文件解壓縮,新產生一個file
gzip -d file.gz增加-r參數可針對目錄進行遞歸解壓縮,和壓縮時的遞歸類似,也是將目錄中的所有文件都解壓縮:
sh
# 將dirname及子目錄下的所有gzip壓縮文件全部解壓縮
gzip -dr dirnamezip壓縮
zip可以同時完成打包和壓縮2個動作。
打包壓縮:
sh
zip archive.zip file1 file2 file3輸出:
sh
adding: file1 (stored 0%)
adding: file2 (stored 0%)
adding: file3 (stored 0%)如果有目錄需要一起打包壓縮,需要加上-r參數,此外可以使用-q參數關閉輸出:
sh
zip -qr archive.zip dirnamezip解壓縮
當前目錄下直接解壓縮:
sh
unzip archive.zip如需要解壓到指定目錄,可使用-d參數,此外-o參數可以不詢問直接覆蓋已有文件:
sh
unzip -d /path/to/destination/directory -o archive.zip速查總結
| 後綴 | 打包/壓縮 | 解包/解壓縮 |
|---|---|---|
| .tar | tar -cvf archive.tar file1 file2 | tar -xvf archive.tar -C /dest/path |
| .tar.gz/.tgz | tar -zcvf archive.tar file1 file2 | tar -zxvf archive.tar -C /dest/path |
| .tar.bz2/.tbz2 | tar -jcvf archive.tar file1 file2 | tar -jxvf archive.tar -C /dest/path |
| .gz | gzip file | gzip -d file.gz |
| .zip | zip -r archive.zip file1 file2 | unzip -d /dest/path -o archive.zip |
