Linux tar 打包 gz bz xz zip 壓縮
- date: 2024-06-13
打包的含義是將多個檔案變成一個檔案(這個檔案稱為歸檔檔案),可以用 tar 來做這個事情,但是其不會壓縮,可以結合使用其它壓縮工具,如 gzip、bzip2 或 xz,來建立既打包又壓縮的歸檔檔案,這就是經常看到的壓縮包了。
scp -Cpr
傳輸大量小檔案時,發現比較慢,gz 壓縮後傳輸快些,當然有些時間花在壓縮上了,感覺先壓縮打包再傳輸比傳輸時壓縮要快些、可靠些
打包(不壓縮)
下面的命令含義是將 test 資料夾打包,並將打包後的檔案命名為 test.tar
tar -cvf test.tar test
引數說明:c代表建立(create),v代表詳細輸出(verbose),f 指定歸檔檔名,這裡面 cf 是必須要寫的,v 可選。該命令會覆蓋操作,並且不會進行詢問
解包則是
tar -xf test.tar
引數說明:x 表示提取檔案
例子
$ tree test/ # 檢視資料夾結構
test/
├── log
│ └── test.txt
├── main.py
├── README.md
├── src
│ └── test.py
└── temp
└── temp.pyc
$ tar -cvf test.tar test # 打包
test/
test/temp/
test/temp/temp.pyc
test/log/
test/log/test.txt
test/src/
test/src/test.py
test/main.py
test/README.md
$ ls -l test.tar
-rw-r--r-- 1 mifen mifen 10240 6月12日 16:40 test.tar
$ rm test.tar
$ tar -cf test.tar test # 打包,不輸出詳細資訊,可以看到不輸出所有檔案路徑了
$ ls -l test.tar
-rw-r--r-- 1 mifen mifen 10240 6月12日 16:41 test.tar
打包壓縮
下面的命令含義是將 test 資料夾打包,並將打包後的檔案重新命名
tar -czf test.tar.gz test
tar -cjf test.tar.bz2 test
tar -cJf test.tar.xz test
引數說明:z、j、J 分別代表 gzip、bzip2、xz 壓縮演算法
- gzip:
- 壓縮和解壓速度相對較快
- 壓縮率適中
- 副檔名通常為
.gz
- bzip2:
- 壓縮率比gzip高,但壓縮和解壓速度較慢
- 適合對壓縮率有較高要求,而對處理速度要求不高的場景
- 副檔名通常為
.bz2
- xz:
- 提供了非常高的壓縮率,但壓縮和解壓速度最慢
- 適合在儲存空間非常有限,且對壓縮率有極高要求的場景
- 副檔名通常為
.xz
解壓縮這三種壓縮包,只需要將上面指令中的引數 c 替換為 x,然後把要打包的資料夾這個引數刪除即可,如 tar -xzf test.tar.gz
還有一個不是和 tar 搭配的,而在 windows 上很常見的 zip: zip -r test.zip test
,引數 r 表示遞迴,其對應的解壓命令是 unzip test.zip
,預設解壓到當前目錄,指定目錄可以用引數 d
例子
上面 test 資料夾沒啥內容,用來做壓縮的例子體現不出這個壓縮效果的差異,不過和 zip 相比確實領先些。於是用一個包含 7w 檔案、38個資料夾、大小為 32G 的資料夾做了壓縮,壓縮體積由大到小分別是 gz bz2 xz
$ zip -r test.zip test
adding: test/ (stored 0%)
adding: test/temp/ (stored 0%)
adding: test/temp/temp.pyc (stored 0%)
adding: test/log/ (stored 0%)
adding: test/log/test.txt (stored 0%)
adding: test/src/ (stored 0%)
adding: test/src/test.py (stored 0%)
adding: test/main.py (stored 0%)
adding: test/README.md (stored 0%)
$ ls -l test.zip
-rw-r--r-- 1 mifen mifen 1394 6月12日 17:03 test.zip
$ tar -czf test.tar.gz test
$ tar -cjf test.tar.bz2 test
$ tar -cJf test.tar.xz test
$ ls -l test.tar.*
-rw-r--r-- 1 mifen mifen 284 6月12日 16:49 test.tar.bz2
-rw-r--r-- 1 mifen mifen 283 6月12日 16:49 test.tar.gz
-rw-r--r-- 1 mifen mifen 300 6月12日 16:49 test.tar.xz
$ du -sh col_1k_6 # 檢視資料夾大小
32G col_1k_6
$ tree col_1k_6 # 檢視資料夾目錄結構
...
38 directories, 78569 files
$ tar -czf col_1k_6.tar.gz col_1k_6
$ tar -cjf col_1k_6.tar.bz2 col_1k_6
$ tar -cJf col_1k_6.tar.xz col_1k_6
$ ls -lh col_1k_6.tar*
-rw-rw-r-- 1 mifen mifen 5.2G 6月 12 18:54 col_1k_6.tar.bz2
-rw-rw-r-- 1 mifen mifen 5.9G 6月 12 18:31 col_1k_6.tar.gz
-rw-rw-r-- 1 mifen mifen 1.6G 6月 12 21:21 col_1k_6.tar.xz
refer
Archiving and compression