Linux tar 打包 gz bz xz zip 壓縮

沙滩炒花蛤發表於2024-06-13

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 壓縮演算法

  1. gzip
    • 壓縮和解壓速度相對較快
    • 壓縮率適中
    • 副檔名通常為.gz
  2. bzip2
    • 壓縮率比gzip高,但壓縮和解壓速度較慢
    • 適合對壓縮率有較高要求,而對處理速度要求不高的場景
    • 副檔名通常為.bz2
  3. 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

相關文章