1. 程式人生 > >tar、7z(7zip)壓縮/解壓縮指令的使用

tar、7z(7zip)壓縮/解壓縮指令的使用

本文介紹tar、7z指令的使用方法

tar指令

在Linux中,使用的最多的壓縮/解壓縮指令就是tar指令了。

tar指令用來將多個檔案/目錄結構打包。在實際使用中,往往使用tar對壓縮的支援,即同時進行打包和壓縮兩步操作。常用的以下幾種檔案格式可以由tar指令生成。

.tar ~ 僅對檔案/目錄結構進行打包操作,不壓縮;

.tar.gz ~ 對檔案/目錄結構進行打包,並按照gzip格式進行壓縮;

.tar.bz2 ~對檔案/目錄結構進行打包,並按照bz2格式進行壓縮;

.tar.xz ~對檔案/目錄結構進行打包,並按照LZMA演算法進行壓縮(Linux核心使用此格式釋出);

指令格式

$ tar --help

用法: tar [選項...] [FILE]...

GNU 'tar' saves many files together into asingle tape or disk archive, and can

restore individual files from the archive.

Examples:

  tar-cf archive.tar foo bar  # Createarchive.tar from files foo and bar.

  tar-tvf archive.tar         # List all filesin archive.tar verbosely.

  tar-xf archive.tar          # Extract allfiles from archive.tar.

tar指令的常用選項如下列表所示:

-c: 建立壓縮檔案

-x:解壓

-t:檢視內容

-r:向壓縮歸檔檔案末尾追加檔案

-u:更新原壓縮包中的檔案

這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的引數是根據需要在壓縮或解壓檔案時可選的。

-z:有gzip屬性的

-j:有bz2屬性的

-J:有xz屬性的

-v:顯示所有過程

-C:切換到某個目錄下執行tar指令

-f: 使用檔案名字,切記,這個引數是最後一個引數,後面只能接檔案名。(必須加此引數)

使用示例

$cd ~/study

$rm –rf *

$mkdir –p d1/d11

$mkdir d2

$touch d1/d11/f1.c

$touch d2/f2.php

$cd ../

#$tar czf study.tar.gz study/ ~ 打包並執行.gz格式壓縮

#$tar cjf study.tar.bz2 study/ ~ 打包並執行.bz2格式壓縮

$tar cJf study.tar.xz study/ ~ 打包並執行.xz格式壓縮

#$tar tf study.tar.gz ~ 檢視壓縮包內的目錄列表

#$tar tf study.tar.bz2 ~ 檢視壓縮包內的目錄列表

$tar tf study.tar.xz ~ 檢視壓縮包內的目錄列表

study/

study/d1/

study/d1/d11/

study/d1/d11/f1.c

study/d2/

study/d2/f2.php

$rm –rf study

#$tar xzf study.tar.xz ~ 解壓縮.gz格式的壓縮包到當前目錄

#$tar xjf study.tar.xz ~ 解壓縮.bz2格式的壓縮包到當前目錄

$tar xJf study.tar.xz ~ 解壓縮.xz格式的壓縮包到當前目錄

$ls

study.tar.xz study

$tar xJf study.tar.xz -C / ~ 將壓縮包解壓到根目錄下

$ ls /

bin      Cygwin.bat Cygwin-Terminal.ico  etc   lib proc   tmp  var

cygdrive Cygwin.ico  dev                  home  opt  study usr

更多資訊

$man tar

7z指令

7z是7zip壓縮工具的常用壓縮檔案格式。7zip是一個開源的壓縮工具,軟體本身十分小巧,功能強大,是目前公認的壓縮比最大的壓縮解壓縮軟體,近年來開始漸漸流行。

7zip支援眾多的壓縮格式,支援7z, XZ,BZIP2, GZIP, TAR, ZIP格式的壓縮/解壓縮。支援CAB, ISO, RAR, RPM, XAR, Z等眾多格式的解壓縮。

程式退出程式碼0表示正常,沒有錯誤。

命令格式

$ 7z --help

Usage: 7z <command>[<switches>...] <archive_name> [<file_names>...]

      [<@listfiles...>]

常用的command如下:

a 新增檔案到壓縮檔案

d 從壓縮檔案中刪除檔案

e 從壓縮檔案中解壓縮檔案,不包含目錄結構

l 列出壓縮包中的內容

t 測試壓縮檔案

u更新檔案到壓縮檔案

x從壓縮檔案中解壓縮,包含目錄結構

使用示例

$ rm * -rf

$ mkdir -p study/d1/d11 study/d2

$ touch study/d1/d11/f1.c study/d2/f2.php

$ 7z a study.7z study/ ~ 將study整個目錄新增到壓縮包study.7z中

Scanning

Creating archive study.7z

Everything is Ok

$ 7z t study.7z ~ 測試壓縮包

Processing archive: study.7z

Testing    study/d1/d11/f1.c

Testing    study/d2/f2.php

Testing    study/d2

Testing    study/d1/d11

Testing    study/d1

Testing    study

Everything is Ok

$ rm -rf study

$ 7z x study.7z ~ 解壓縮包到當前目錄

Processing archive: study.7z

Extracting study/d1/d11/f1.c

Extracting study/d2/f2.php

Extracting study/d2

Extracting study/d1/d11

Extracting study/d1

Extracting study

Everything is Ok

$ 7z d study.7z study/d2/f2.php ~ 刪除壓縮包中的指定檔案

Updating archive study.7z

Everything is Ok

$ 7z t study.7z ~ 測試壓縮包

Processing archive: study.7z

Testing    study/d1/d11/f1.c

Testing    study/d2

Testing    study/d1/d11

Testing    study/d1

Testing    study

Everything is Ok

$ 7z l study.7z ~ 檢視壓縮包中的目錄結構

Listing archive: study.7z

--

Path = study.7z

Type = 7z

Solid = -

Blocks = 0

Physical Size = 152

Headers Size = 152

study/d1/d11/f1.c

study/d2

study/d1/d11

study/d1

study

$ 7z u study.7z study/d1/d11/f1.c ~ 更新壓縮包中的指定檔案

Scanning

Updating archive study.7z

Compressing study/d1/d11/f1.c

Everything is Ok

$ 7z l study.7z ~ 檢視壓縮包中的目錄結構

Listing archive: study.7z

--

Path = study.7z

Type = 7z

Method = LZMA

Solid = -

Blocks = 1

Physical Size = 260

Headers Size = 186

study/d1/d11/f1.c

study/d2

study/d1/d11

study/d1

study

7zip的壓縮格式控制

在上述示例中,演示了7z壓縮/解壓縮指令的使用。在使用7z進行壓縮/解壓縮時,壓縮格式是根據命令中提供的壓縮包的檔案字尾名來識別的。例如,7z a study.zip study/ 將目錄樹study按照zip格式進行壓縮,7z a study.7z study/將目錄樹study按照7z格式進行壓縮。反之,解壓縮時,壓縮格式也是根據壓縮包檔名字尾自動識別的。

對於7zip和tar的各種壓縮格式(tar.gz tar.bz2 tar.xz)之間的相容,可以參考如下實現。

$ 7z a study4.tar study ~ step1 先按tar格式進行打包

#按照實驗結果推斷,本條指令與tar cf study4.tar study 具有相同效果

Scanning

Creating archive study4.tar

Compressing study

Compressing study/d1

Compressing study/d1/d11

Compressing study/d1/d11/f1.c

Compressing study/d2

Compressing study/d2/f2.php

Everything is Ok

$ 7z a study4.tar.gz study4.tar ~ 將已打包的檔案進行按gzip格式壓縮

Scanning

Creating archive study4.tar.gz

Compressing study4.tar

Everything is Ok

$tar tf study4.tar ~ 使用tar指令測試檔案包,無錯誤

study/

study/d1/

study/d1/d11/

study/d1/d11/f1.c

study/d2/

study/d2/f2.php

$tar tf study4.tar.gz ~ 使用tar指令測試壓縮包,無錯誤

study/

study/d1/

study/d1/d11/

study/d1/d11/f1.c

study/d2/

study/d2/f2.php

$ rm study -rf

$tar xzvf study4.tar.gz ~ 使用tar解壓縮由7z生成的.tar.gz壓縮包,成功。

study/

study/d1/

study/d1/d11/

study/d1/d11/f1.c

study/d2/

study/d2/f2.php

$ rm *.*

$ ls

study

$tar czf study4.tar.gz study ~ 使用tar指令生成.tar.gz格式壓縮包

$ 7z x study4.tar.gz ~ 使用7z解壓縮tar生成的壓縮包,成功

Processing archive: study4.tar.gz

Extracting study4.tar

Everything is Ok

$ 7z x study4.tar ~ 使用7z進一步解壓,成功

Processing archive: study4.tar

Extracting study

Extracting study/d1

Extracting study/d1/d11

Extracting study/d1/d11/f1.c

Extracting study/d2

Extracting study/d2/f2.php

Everything is Ok

$

$tar cvf study5.tar study ~ 使用tar建立無壓縮的檔案包

study/

study/d1/

study/d1/d11/

study/d1/d11/f1.c

study/d2/

study/d2/f2.php

$ 7z a study5.tar.bz2 study5.tar ~ 使用7zip將檔案包壓縮

Scanning

Creating archive study5.tar.bz2

Compressing study5.tar

Everything is Ok

$tar tf study5.tar.bz2 ~ 使用tar測試壓縮包

study/

study/d1/

study/d1/d11/

study/d1/d11/f1.c

study/d2/

study/d2/f2.php

$ 7z x study5.tar.bz2 ~ 使用7zip解壓縮壓縮包

Processing archive: study5.tar.bz2

file study5.tar

Extracting study5.tar

Everything is Ok

$ rm -rf study

$ 7zx study5.tar ~ 使用7zip還原tar指令生成的檔案包

Processing archive: study5.tar

Extracting study

Extracting study/d1

Extracting study/d1/d11

Extracting study/d1/d11/f1.c

Extracting study/d2

Extracting study/d2/f2.php

Everything is Ok

$ rm study -rf

$tar xjvf study5.tar.bz2 ~ 使用tar解壓縮tar+7zip生成的.tar.bz2壓縮包

study/

study/d1/

study/d1/d11/

study/d1/d11/f1.c

study/d2/

study/d2/f2.php

$