Linux 常用命令:解壓縮篇

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

作者:守望(本文來自作者投稿,簡介見末尾)

前言

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-zcvftest.tar.gzfile1file2#打包,並以 gzip壓縮

tar-jcvftest.tar.bz2file1file2#打包,並以 bzip2壓縮

查看壓縮包中的文件

如果不想解壓,只是想查看壓縮包中的文件內容,可以使用-t參數:

tar-tvf test.tar #可查看test包中有哪些文件

打包後刪除源文件

有時候再打包後可能需要刪除源文件,但一個個刪除顯得麻煩,我們可以使用–remove-files 選項:

tar-zcvftest.tar.gztest.log–remove-files

打包除指定目錄或文件以外的文件

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

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

這里用到了–exclude選項,支持通配符和正則表達式,因此也非常強大。

向壓縮包中更新文件

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

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

向tar包中增加文件

向tar包中增加文件可使用-r參數:

tar-rftest.tartestfile#在 test.tar包中增加文件,只針對 tar包

刪除壓縮包中的文件

在不解壓的情況下,可使用–delete選項刪除包中的文件:

tar — delete-f test.tar test1 #從test.tar中刪除test1文件

解壓

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

tar-xvftest.tar.gz

tar-xvftest.tar

解壓到指定目錄

tar-xvftest.tar.gz-Cdir

tar-xvftest.tar-Cdir

解壓包中指定的文件

例如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-xvkftest.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-utest.ziptest2#向 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-otest.zip-ddir#講 test.zip解壓到 dir目錄

解壓包中指定的文件

如果不知道需要解壓的文件名,可先查看包中的文件,然後使用下面的方法:

unzip-otest.zip“1 .log” -ddir#解壓包中的1 .log文件到 dir目錄

unzip-otet.zip“* .log” -ddir#解壓包中所有的 log文件

解壓時去掉目錄結構

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

zip-oj test.zip -d ./temp

解壓jar包

jar包是java歸檔包,但同樣可用unzip解壓查看里面的文件:

unzip-ojava.jar-ddir

gzip

涉及參數說明:

-k 保留源文件

-d 解開壓縮文件

-r 遞歸處理,將指定目錄下的所有文件及子目錄一並處理

-v 顯示指令執行過程

tar命令帶有-z參數,並且打包成tar.gz文件時,便調用gzip進行了壓縮。gzip對文本的壓縮率約有60%~70%,壓縮包文件常以gz為後綴。使用-k參數保留源文件:

gzip-k ./* #當前目錄下所有文件進行壓縮,每個文件一個gz包

gzip -rkv ./* 遞歸壓縮

解壓也很簡單:

gzip-dvtest.gz

bzip2

tar命令使用-j參數將文件打包為tar.bz2時,便調用了bzip2進行壓縮。bzip2壓縮或解壓後,會將源文件刪除。如果需要保留源文件,可使用-k參數:

bzip2 -zk test#壓縮test文件

bzip2 -dk test.bz2 #解壓

rar/unrar

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

raratest.tartest#將 test文件壓縮為 test.tar

raretest.rar#解壓 test.tar

unrarxtest.rar#解壓 test.tar

壓縮率比較

壓縮率一般來說:

tar.bz2> tar.gz> zip> tar

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

總結

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

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

【本文作者】

守望:一名好文學,好技術的開發者。在個人公眾號「編程珠璣」堅持分享原創技術文章,期待一起交流學習。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!