Linux常用命令中,有很多用於對文件的壓縮或解壓,本文將介紹這些解壓縮命令中不常見卻非常實用的用法。
tartar是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 -cvf test.tar test1.log test2.log
tar -cvf test.tar test/*
tar -cvf test.tar *.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
有時候再打包後可能需要刪除源文件,但一個個刪除顯得麻煩,我們可以使用--remove-files 選項:
tar -zcvf test.tar.gz test.log --remove-files
對於某些目錄下的文件,可能只需要打包部分文件,因此可以使用--exclude選項排除一些不需要打包的文件:
tar -zcvf test.tar.gz --exclude=test/*.log test/*
這裡用到了--exclude選項,支持通配符和正則表達式,因此也非常強大。
向壓縮包中更新文件例如,壓縮包中已經打入了test以及其他文件,現在你只想更新壓縮包中的test文件,那麼你可以使用--add-file選項:
tar -tf test.tar --add-file=test
向tar包中增加文件可使用-r參數:
tar -rf test.tar testfile #在test.tar包中增加文件,只針對tar包
在不解壓的情況下,可使用--delete選項刪除包中的文件:
tar --delete -f test.tar test1
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/unzipzip和unzip命令主要用於處理zip包。
壓縮涉及參數說明:
-d 從壓縮文件內刪除指定的文件。
-f 此參數的效果和指定"-u"參數類似,但不僅更新既有文件,如果某些文件原本不存在於壓縮文件內,使用本參數會一併將其加入壓縮文件中。
-j 只保存文件名稱及其內容,而不存放任何目錄名稱。
-r 遞歸處理,將指定目錄下的所有文件和子目錄一併處理。
-u 更換較新的文件到壓縮文件內。
-v 顯示指令執行過程或顯示版本信息。
-y 直接保存符號連接,而非該連接所指向的文件,本參數僅在UNIX之類的系統下有效。
- <壓縮效率> 壓縮效率是一個介於1-9的數值。
zip -r test.zip test/
zip -rj test.zip test/
zip -r8 test.zip test/*
前面的命令只能打包普通文件,如果想要打包符號連結文件,則需要使用參數-y:
zip -ry test.zip test
有時候需要向壓縮包中增加文件,但又不想重新解壓打包,可以使用參數-u:
zip -u test.zip test2 #向test.zip 包中增加test2文件
壓縮時如果需要對壓縮包進行加密,可使用-P參數:
zip -r test.zip test1 test -P 66666
zip -d test.zip test
涉及參數說明:
-l 顯示壓縮文件內所包含的文件
-j 只保存文件名稱及其內容,而不存放任何目錄名稱。
-o 以壓縮文件內擁有最新更改時間的文件為準,將壓縮文件的更改時間設成和該
-v 顯示指令執行過程或顯示版本信息。
-d 指定解壓目錄,目錄不存在會創建
unzip -l test.zip
unzip -v test.zip
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包是java歸檔包,但同樣可用unzip解壓查看裡面的文件:
unzip -o java.jar -d dir
涉及參數說明:
-k 保留源文件
-d 解開壓縮文件
-r 遞歸處理,將指定目錄下的所有文件及子目錄一併處理
-v 顯示指令執行過程
tar命令帶有-z參數,並且打包成tar.gz文件時,便調用gzip進行了壓縮。gzip對文本的壓縮率約有60%~70%,壓縮包文件常以gz為後綴。使用-k參數保留源文件:
gzip -k ./*
gzip -rkv ./* 遞歸壓縮
解壓也很簡單:
gzip -dv test.gz
tar命令使用-j參數將文件打包為tar.bz2時,便調用了bzip2進行壓縮。bzip2壓縮或解壓後,會將源文件刪除。如果需要保留源文件,可使用-k參數:
bzip2 -zk test
bzip2 -dk test.bz2
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
壓縮率越高,壓縮以及解壓的時間也就越長。
總結對文件進行壓縮能夠節省磁碟空間,進行網絡傳輸時,也能節省帶寬,但是需要注意的是,空間和時間是需要根據實際應用進行權衡的。解壓縮命令較多,為避免在其他平臺使用不便,可選擇常用命令進行壓縮文件。
有任何補充或建議,歡迎留言^_^。
相關文章:
Linux常用命令--文本查看篇
Linux常用命令--系統狀態篇