看完這篇Linux下的解壓縮你還不會嗎?

前言

Linux經常使用命令中,有不少用於對文件的壓縮或解壓,本文將介紹這些解壓縮命令中不常見卻很是實用的用法。html

tar

tar是linux中最經常使用的解壓縮命令。tar命令可用於處理後綴名爲tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。 涉及參數說明:java

-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結尾的文件 
複製代碼

因爲這種方式不會進行壓縮,僅作了歸檔,所以速度極快,同時佔用空間也較大。linux

歸檔並壓縮爲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選項排除一些不須要打包的文件:bash

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=1 #去掉一層目錄

複製代碼

解壓時不覆蓋原文件

當前目錄可能已經存在包中的文件,若是不想解壓出來的文件覆蓋當前已存在的文件,可以使用-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文件
複製代碼

微信公衆號【編程珠璣】:專一但不限於分享計算機編程基礎,Linux,C語言,C++,數據結構與算法,工具,資源等編程相關[原創]技術文章。 原文地址:www.yanbinghu.com/2018/10/19/…

壓縮時加密

壓縮時若是須要對壓縮包進行加密,可以使用-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 a test.tar test  #將test文件壓縮爲test.tar
rar e test.rar       #解壓test.tar
unrar x test.rar     #解壓test.tar
複製代碼

壓縮率比較

壓縮率通常來講:

tar.bz2>tar.gz>zip>tar
複製代碼

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

總結

對文件進行壓縮可以節省磁盤空間,進行網絡傳輸時,也能節省帶寬,可是須要注意的是,空間和時間是須要根據實際應用進行權衡的。解壓縮命令較多,爲避免在其餘平臺使用不便,可選擇經常使用命令進行壓縮文件。有任何補充或建議,歡迎留言。

以上內容來自公衆號【編程珠璣】

相關文章
相關標籤/搜索