這裡介紹如何在 Linux 中從各種的大壓縮檔中解壓縮單一檔案,包含 tar.gz、tar.bz2、tar.xz、zip、rar 這些常見的壓縮格式。

在 Linux 中如果要從一個比較大的壓縮檔中取出少數的檔案,使用圖形介面的解壓縮工具程式是最方便的方式,以 Ubuntu Linux 桌面環境為例,其本身就有內建壓縮檔管理員,使用這個工具可以輕鬆瀏覽、搜尋或解壓縮各種壓縮檔。


linux-unix-extracting-specific-files-from-tarball-zip-rar-1

壓縮檔管理員

不過如果透過 SSH 連線至遠端 Linux 伺服器的狀況下,只能使用指令操作的話,就需要一些技巧了。以下我們將介紹各種壓縮檔案格式的部份檔案解壓縮方式,讓使用者快速從壓縮檔中搜尋需要的檔案,並且將其解壓縮。

Tarball 壓縮檔

tarball 壓縮檔是指各類型的 tar 壓縮檔,常見的壓縮方式有 tar.gztar.bz2tar.xz 這三種,這些 tarball 的解壓縮方法都大同小異。

拿到一個較大的 tarball 檔案時,首先可以先查看一下裡面有哪些檔案,tar-t 參數可以讓我們在不要實際進行解壓縮檔案的情況下,列出檔案列表:

tar ztvf ParaView-v5.1.2.tar.gz

通常大壓縮檔的檔案數量都很多,所以配合 grep 來尋找自己要的檔案會比較方便:

tar ztvf ParaView-v5.1.2.tar.gz | grep README

這樣就會列出 ParaView-v5.1.2.tar.gz 壓縮檔中所有 README 的位置。而找到檔案的位置之後,就可以把需要的檔案解壓縮出來,解壓縮部分檔案的方式跟解壓縮整個檔案類似,只是在最後加上要解壓縮的檔案路徑,例如:

tar zxvf ParaView-v5.1.2.tar.gz ParaView-v5.1.2/README.md

這樣就可以把 ParaView-v5.1.2.tar.gz 這個壓縮檔中的 ParaView-v5.1.2/README.md 解壓縮出來。

如果要解壓縮多個檔案,就將所有的檔案路徑家在後面即可:

tar zxvf tarball.tar.gz file/path1 file/path2 file/path3

另一種很常用的解壓縮方式是一次將特定的檔案類型全部解壓縮出來,例如將 ParaView-v5.1.2.tar.gz 中所有的 C 語言程式碼檔案(*.c)解壓縮出來:

tar zxvf ParaView-v5.1.2.tar.gz --wildcards --no-anchored '*.c'

--wildcards 是代表使用萬用字元的意思,而 --no-anchored 則是代表只對檔案名稱做比對(不要比對 / 之前的文字)。

tar.bz2 的解壓縮方式也都類似,只是將 -z 換成 -j 而已:

tar jtvf tarball.tar.bz2 # 查看壓縮檔
tar jxvf tarball.tar.bz2 file/path # 解壓縮單檔
tar jxvf tarball.tar.bz2 --wildcards --no-anchored '*.c' # 解壓縮 *.c

這個是 tar.xz 的解壓縮方式:

tar Jtvf tarball.tar.xz # 查看壓縮檔
tar Jxvf tarball.tar.xz file/path # 解壓縮單檔
tar Jxvf tarball.tar.xz --wildcards --no-anchored '*.c' # 解壓縮 *.c

關於 tar 指令的操作,可以參考 UNIX/Linux 檔案壓縮與備份工具 tar 指令使用教學與範例

Zip 壓縮檔

unzip-l 參數可以列出 zip 壓縮檔中的檔案列表:

unzip -l R_Course.zip
Archive:  R_Course.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2016-10-12 15:49   R語言入門課程20161027/
  2449990  2016-10-12 15:31   R語言入門課程20161027/01-introduction.pdf
  2357267  2016-10-12 15:32   R語言入門課程20161027/02-vectors.pdf
  1873540  2016-10-12 15:33   R語言入門課程20161027/03-variables-and-workspace.pdf
  2004089  2016-10-12 15:33   R語言入門課程20161027/04-matrices-and-arrays.pdf
  1635561  2016-10-12 15:34   R語言入門課程20161027/05-lists.pdf
[略]

解壓縮指定的檔案,並且捨去原來的目錄結構,直接將檔案放在目前的目錄下:

unzip -j R_Course.zip R語言入門課程20161027/03-variables-and-workspace.pdf
Archive:  R_Course.zip
  inflating: 03-variables-and-workspace.pdf

解壓縮所有的 PDF 檔案:

unzip -j R_Course.zip '*.pdf'

-p 可將解壓縮的檔案直接輸出至 stdout

unzip -p source.zip path/file.txt > file.txt

Rar 壓縮檔

若要解壓縮 rar 壓縮檔,必須先安裝 unrar 這個解壓縮工具:

sudo apt-get install unrar

首先列出 rar 壓縮檔的內容:

unrar l archive.rar
UNRAR 5.30 beta 2 freeware      Copyright (c) 1993-2015 Alexander Roshal

Archive: archive.rar
Details: RAR 4

 Attributes      Size     Date    Time   Name
----------- ---------  ---------- -----  ----
 -rw-r--r--        57  2016-07-12 17:30  R語言入門課程20161027/data-3.txt
 -rw-------   1409077  2016-10-12 15:37  R語言入門課程20161027/10-environments.pdf
 -rw-------   2004089  2016-10-12 15:33  R語言入門課程20161027/04-matrices-and-arrays.pdf
 -rw-------   1401706  2016-10-12 15:39  R語言入門課程20161027/13-packages.pdf
[略]

解壓縮指定的檔案:

unrar e archive.rar path/file1 path/file2

參考資料:nixCraftStackExchange