1. 程式人生 > >Linux常用命令-解壓縮篇

Linux常用命令-解壓縮篇



前言

Linux常用命令中,有很多用於對檔案的壓縮或解壓,本文將介紹這些解壓縮命令中不常見卻非常實用的用法。

tar

tar是linux中最常用的解壓縮命令。tar命令可用於處理字尾名為tar,tar.gz,tgz,.tar.Z,tar.bz2的檔案。
涉及引數說明:

-c 建立新的壓縮檔案
-r 新增檔案到已經壓縮的檔案
-u 新增改變了和現有的檔案到已經存在的壓縮檔案
-x 從壓縮的檔案中提取檔案
-t 顯示壓縮檔案的內容
-z 支援gzip解壓檔案
-j 支援bzip2解壓檔案
-v 顯示操作過程
-k 保留源有檔案不覆蓋
-C 切換到指定目錄
-f 指定壓縮檔案

--delete            刪除包中檔案
--strip-components  去除目錄
--add-file          向包中新增檔案

壓縮

歸檔tar包,不壓縮

tar -cvf test.tar test1.log test2.log #歸檔多個檔案
tar -cvf test.tar test/*  #歸檔test目錄下所有檔案
tar -cvf test.tar *.log  #歸檔所有以.log結尾的檔案 

由於這種方式不會進行壓縮,僅做了歸檔,因此速度極快,同時佔用空間也較大。

歸檔並壓縮為tar.gz或tar.bz2

這種方式打包對檔案進行了壓縮:

tar -zcvf test.tar.gz file1 file2 #打包,並以gzip壓縮
tar -jcvf test.tar.bz2 file1 file2 #打包,並以bzip2壓縮

檢視壓縮包中的檔案

如果不想解壓,只是想檢視壓縮包中的檔案內容,可以使用-t引數:

tar -tvf test.tar #可檢視test包中有哪些檔案

打包後刪除原始檔

有時候在打包後可能需要刪除原始檔,但一個個刪除顯得麻煩,我們可以使用--remove-files 選項:

tar -zcvf test.tar.gz test.log --remove-files 

打包除指定目錄或檔案以外的檔案

對於某些目錄下的檔案,可能只需要打包部分檔案,因此可以使用--exclude選項排除一些不需要打包的檔案:

tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目錄下所有檔案,排除以.log結尾的檔案

這裡用到了--exclude選項,支援萬用字元和正則表示式,因此也非常強大。

向壓縮包中更新檔案

例如,壓縮包中已經打入了test以及其他檔案,現在你只想更新壓縮包中的test檔案,那麼你可以使用--add-file選項:

tar -tf test.tar --add-file=test #只針對tar包

向tar包中增加檔案

向tar包中增加檔案可使用-r引數:

tar -rf test.tar testfile #在test.tar包中增加檔案,只針對tar包

刪除壓縮包中的檔案

在不解壓的情況下,可使用--delete選項刪除包中的檔案:

tar --delete -f test.tar  test1 #從test.tar中刪除test1檔案

解壓

解壓tar.gz和tar包到當前目錄

tar -xvf test.tar.gz
tar -xvf test.tar 

解壓到指定目錄

tar -xvf test.tar.gz -C dir
tar -xvf test.tar -C dir

解壓包中指定的檔案

例如test.tar.gz包中檔案情況如下:

1.txt
log/
log/1.log
log/2.log
log/2.log
log/4.log
log/5.log

如果我們只需要解壓出log目錄下的1.log,只需要執行下面的命令:

tar -xvf test.tar.gz log/1.log
tar -xvf test.tar.gz log/1.log -C test #將1.log解壓到test目錄

解壓時去掉目錄結構

壓縮包中的檔案可能存在多級目錄,常規方式解壓出來後,對應目錄也會存在。如果只想要壓縮包的檔案,可以去掉目錄結構(注意:同一資料夾下檔名不能重):

tar -xvf test.tar.gz --strip-components=#去掉一層目錄

解壓時不覆蓋原檔案

當前目錄可能已經存在包中的檔案,如果不想解壓出來的檔案覆蓋當前已存在的檔案,可使用-k引數(會丟擲錯誤資訊):

tar -xvkf test.tar.gz

特別提醒

前面所提到的解壓或者壓縮帶的f引數需要放在最後,因為它指定了壓縮包名字,否則會出現解壓或壓縮失敗。

zip/unzip

zip和unzip命令主要用於處理zip包。

壓縮

涉及引數說明:

-d 從壓縮檔案內刪除指定的檔案。
-f 此引數的效果和指定"-u"引數類似,但不僅更新既有檔案,如果某些檔案原本不存在於壓縮檔案內,使用本引數會一併將其加入壓縮檔案中。
-j 只儲存檔名稱及其內容,而不存放任何目錄名稱。
-r 遞迴處理,將指定目錄下的所有檔案和子目錄一併處理。
-u 更換較新的檔案到壓縮檔案內。
-v 顯示指令執行過程或顯示版本資訊。
-y 直接儲存符號連線,而非該連線所指向的檔案,本引數僅在UNIX之類的系統下有效。
- <壓縮效率> 壓縮效率是一個介於1-9的數值。

壓縮檔案

zip -r test.zip test/ #打包test目錄下的檔案
zip -rj test.zip test/ #打包test目錄下檔案,且壓縮包不帶test目錄

指定壓縮率打包檔案

zip -r8 test.zip test/* #數值(1-9)越大,壓縮率越高,耗時越長

打包符號連結檔案

前面的命令只能打包普通檔案,如果想要打包符號連結檔案,則需要使用引數-y:

zip  -ry test.zip test

向壓縮包中增加或更新檔案

有時候需要向壓縮包中增加檔案,但又不想重新解壓打包,可以使用引數-u:

zip -u test.zip test2 #向test.zip 包中增加test2檔案

壓縮時加密

壓縮時如果需要對壓縮包進行加密,可使用-P引數:

zip -r test.zip test1 test -P 66666 #使用密碼66666加密

刪除壓縮包的特定檔案

zip -d test.zip test  #刪除test.zip包中的test檔案

解壓

涉及引數說明:

-l 顯示壓縮檔案內所包含的檔案
-j 只儲存檔名稱及其內容,而不存放任何目錄名稱。
-o 以壓縮檔案內擁有最新更改時間的檔案為準,將壓縮檔案的更改時間設成和該
-v 顯示指令執行過程或顯示版本資訊。
-d 指定解壓目錄,目錄不存在會建立

檢視壓縮包中的檔案資訊

unzip -l test.zip #可以看到壓縮包中的檔名,日期等資訊
unzip -v test.zip #檢視更多資訊,例如crc校驗資訊等

解壓壓縮包

unzip -o test.zip -d dir #講test.zip解壓到dir目錄

解壓包中指定的檔案

如果不知道需要解壓的檔名,可先檢視包中的檔案,然後使用下面的方法:

unzip -o test.zip "1.log" -d dir #解壓包中的1.log檔案到dir目錄
unzip -o tet.zip "*.log" -d dir  #解壓包中所有的log檔案

解壓時去掉目錄結構

壓縮包中有多層目錄結構,普通解壓仍然會保留目錄結構,如果只想要壓縮包中的檔案,可以使用-j引數:

zip -oj test.zip -d ./temp  

解壓jar包

jar包是java歸檔包,但同樣可用unzip解壓檢視裡面的檔案:

unzip -o java.jar -d dir

gzip

涉及引數說明:

-k 保留原始檔
-d 解開壓縮檔案
-r 遞迴處理,將指定目錄下的所有檔案及子目錄一併處理
-v 顯示指令執行過程

tar命令帶有-z引數,並且打包成tar.gz檔案時,便呼叫gzip進行了壓縮。gzip對文字的壓縮率約有60%~70%,壓縮包檔案常以gz為字尾。使用-k引數保留原始檔:

gzip -k ./* #當前目錄下所有檔案進行壓縮,每個檔案一個gz包
gzip -rkv ./* 遞迴壓縮

解壓也很簡單:

gzip -dv test.gz 

bzip2

tar命令使用-j引數將檔案打包為tar.bz2時,便呼叫了bzip2進行壓縮。bzip2壓縮或解壓後,會將原始檔刪除。如果需要保留原始檔,可使用-k引數:

bzip2 -zk test  #壓縮test檔案
bzip2 -dk test.bz2  #解壓

rar/unrar

rar和unrar命令並非linux發行版自帶命令,需要另外安裝。常見用法如下:

rar test.tar test  #將test檔案壓縮為test.tar
rar test.rar       #解壓test.tar
unrar test.rar     #解壓test.tar

壓縮率比較

壓縮率一般來說:

tar.bz2>tar.gz>zip>tar

壓縮率越高,壓縮以及解壓的時間也就越長。

總結

對檔案進行壓縮能夠節省磁碟空間,進行網路傳輸時,也能節省頻寬,但是需要注意的是,空間和時間是需要根據實際應用進行權衡的。解壓縮命令較多,為避免在其他平臺使用不便,可選擇常用命令進行壓縮檔案。

有任何補充或建議,歡迎留言^_^。

 

相關文章:

Linux常用命令--文字檢視篇

Linux常用命令--系統狀態篇