Linux打包壓縮
Linux下打包壓縮命令
下面學習一下壓縮和打包的相關命令,首先得先明確兩個概念,即:壓縮和打包 。我們實際使用中一般是打包和壓縮結合的使用,為了學習下面簡要的介紹一下壓縮文件或目錄的命令。
-
壓縮:將文件或目錄進行壓強,使文件或目錄大小變小。
-
打包:表示將目錄中的所有內容,捆綁在一起,方便傳輸,打包後的文件會變大,不一定會變小。
gzip、gunzip
gzip即GNU zip,是GUN下的開源免費軟件。gzip使用起來非常的簡單,文件經它壓縮過後,其名稱後面會使用".gz"的擴展名。但是區別於windows下的winRAR,我們在Linux的所有壓縮包放到windows下,winRAR都可以將它解壓縮(也就是說windows的WinRAR什麽格式的文件都支持,但是Linux就不一定支持了,當然你要安裝相應的軟件也可以,但是最好不要給自己制造麻煩),但是如果反過來,我們在windows下壓縮包放到Linux下,就必須去找一個winRAR的Linux版本了。
特點
-
只能壓縮文件,不能壓縮目錄。
-
不保留源文件 newfile1.gz newfile1不在了。
解壓文件:
-
gunzip gunzip /prem/newfile1.gz 解壓也是不能保留源文件的,會將被解壓的.gz包自動刪除 。
-
gzip -d(decompress表示解壓) +壓縮包名稱。
gzip參數
-
-a或--ascii 使用ASCII文字模式。
-
-c或--stdout或--to-stdout 把壓縮後的文件輸出到標準輸出設備,不去更動原始文件。
-
-d或--decompress或----uncompress 解開壓縮文件。
-
-f或--force 強行壓縮文件。不理會文件名稱或硬連接是否存在以及該文件是否為符號連接。
-
-l或--list 列出壓縮文件的相關信息。
-
-L或--license 顯示版本與版權信息。
-
-n或--no-name 壓縮文件時,不保存原來的文件名稱及時間戳記。
-
-N或--name 壓縮文件時,保存原來的文件名稱及時間戳記。
-
-q或--quiet 不顯示警告信息。
-
-r或--recursive 遞歸處理,將指定目錄下的所有文件及子目錄一並處理。
-
-S<壓縮字尾字符串>或----suffix<壓縮字尾字符串> 更改壓縮字尾字符串。
-
-t或--test 測試壓縮文件是否正確無誤。
-
-v或--verbose 顯示指令執行過程。
-
-<壓縮效率> 壓縮效率是一個介於1-9的數值,預設值為"6",指定愈大的數值,壓縮效率就會愈高。
-
--best 此參數的效果和指定"-9"參數相同。
-
--fast 此參數的效果和指定"-1"參數相同。
gunzip命令參數
-
-a或--ascii 使用ASCII文字模式。
-
-c或--stdout或--to-stdout 把解壓後的文件輸出到標準輸出設備。
-
-f或-force 強行解開壓縮文件,不理會文件名稱或硬連接是否存在以及該文件是否為符號連接。
-
-l或--list 列出壓縮文件的相關信息。
-
-L或--license 顯示版本與版權信息。
-
-n或--no-name 解壓縮時,若壓縮文件內含有遠來的文件名稱及時間戳記,則將其忽略不予處理。
-
-N或--name 解壓縮時,若壓縮文件內含有原來的文件名稱及時間戳記,則將其回存到解開的文件上。
-
-q或--quiet 不顯示警告信息。
-
-r或--recursive 遞歸處理,將指定目錄下的所有文件及子目錄一並處理。
-
-S<壓縮字尾字符串>或--suffix<壓縮字尾字符串> 更改壓縮字尾字符串。
-
-t或--test 測試壓縮文件是否正確無誤。
-
-v或--verbose 顯示指令執行過程。
使用舉例
把test目錄下的文件壓縮:
[root@hpf-linux test]# ls -lh
總用量 1.5M
-rw-------. 1 root root 403K 3月 18 23:09 messages
-rw-------. 1 root root 202K 3月 18 23:09 messages-20160131
-rw-------. 1 root root 202K 3月 18 23:09 messages-20160207
-rw-------. 1 root root 405K 3月 18 23:09 messages-20160312
-rw-------. 1 root root 316K 3月 18 23:09 messages-20160313
-rwxr-xr--. 1 root root 0 3月 15 23:17 test.sh
[root@hpf-linux test]# gzip *
[root@hpf-linux test]# ls -lh
總用量 208K
-rw-------. 1 root root 26K 3月 18 23:09 messages-20160131.gz
-rw-------. 1 root root 26K 3月 18 23:09 messages-20160207.gz
-rw-------. 1 root root 52K 3月 18 23:09 messages-20160312.gz
-rw-------. 1 root root 41K 3月 18 23:09 messages-20160313.gz
-rw-------. 1 root root 51K 3月 18 23:09 messages.gz
-rwxr-xr--. 1 root root 28 3月 15 23:17 test.sh.gz
顯示每個壓縮的文件的信息:
[root@hpf-linux test]# gzip -l *
compressed uncompressed ratio uncompressed_name
26226 206562 87.3% messages-20160131
26235 206250 87.3% messages-20160207
52459 413752 87.3% messages-20160312
41594 323420 87.2% messages-20160313
51914 411945 87.4% messages
28 0 0.0% test.sh
198456 1561929 87.3% (totals)
bzip2與bunzip2
bzip2采用新的壓縮演算法,壓縮效果比傳統的LZ77/LZ78壓縮演算法來得好。若沒有加上任何參數,bzip2壓縮完文件後會產生.bz2的壓縮文件,並刪除原始的文件。
bzip2命令選項
-
-c或--stdout 將壓縮與解壓縮的結果送到標準輸出。
-
-d或--decompress 執行解壓縮。
-
-f或--force bzip2在壓縮或解壓縮時,若輸出文件與現有文件同名,預設不會覆蓋現有文件。若要覆蓋,請使用此參數。
-
-k或--keep bzip2在壓縮或解壓縮後,會刪除原始的文件。若要保留原始文件,請使用此參數。
-
-s或--small 降低程序執行時內存的使用量。
-
-t或--test 測試.bz2壓縮文件的完整性。
-
-v或--verbose 壓縮或解壓縮文件時,顯示詳細的信息。
-
-z或--compress 強制執行壓縮。
-
-L,--license,
-
--repetitive-best 若文件中有重復出現的資料時,可利用此參數提高壓縮效果。
-
--repetitive-fast 若文件中有重復出現的資料時,可利用此參數加快執行速度。
-
-壓縮等級 壓縮時的區塊大小。
bunzip2命令參數
-
-f或--force 解壓縮時,若輸出的文件與現有文件同名時,預設不會覆蓋現有的文件。若要覆蓋,請使用此參數。
-
-k或--keep 在解壓縮後,預設會刪除原來的壓縮文件。若要保留壓縮文件,請使用此參數。
-
-s或--small 降低程序執行時,內存的使用量。
-
-v或--verbose 解壓縮文件時,顯示詳細的信息。
zip與unzip
zip是個使用廣泛的壓縮程序,文件經它壓縮後會另外產生具有".zip"擴展名的壓縮文件。而解壓此類文件需要unzip命令來進行解壓。
語 法
zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目錄>][-ll][-n <字尾字符串>][-t <日期時間>][-<壓縮效率>][壓縮文件][文件...][-i <範本樣式>][-x <範本樣式>]
zip命令參數
-
-A 調整可執行的自動解壓縮文件。
-
-b<工作目錄> 指定暫時存放文件的目錄。
-
-c 替每個被壓縮的文件加上註釋。
-
-d 從壓縮文件內刪除指定的文件。
-
-D 壓縮文件內不建立目錄名稱。
-
-f 此參數的效果和指定"-u"參數類似,但不僅更新既有文件,如果某些文件原本不存在於壓縮文件內,使用本參數會一並將其加入壓縮文件中。
-
-F 嘗試修復已損壞的壓縮文件。
-
-g 將文件壓縮後附加在既有的壓縮文件之後,而非另行建立新的壓縮文件。
-
-i<範本樣式> 只壓縮符合條件的文件。
-
-j 只保存文件名稱及其內容,而不存放任何目錄名稱。
-
-J 刪除壓縮文件前面不必要的數據。
-
-k 使用MS-DOS兼容格式的文件名稱。
-
-l 壓縮文件時,把LF字符置換成LF+CR字符。
-
-ll 壓縮文件時,把LF+CR字符置換成LF字符。
-
-L 顯示版權信息。
-
-m 將文件壓縮並加入壓縮文件後,刪除原始文件,即把文件移到壓縮文件中。
-
-n<字尾字符串> 不壓縮具有特定字尾字符串的文件。
-
-o 以壓縮文件內擁有最新更改時間的文件為準,將壓縮文件的更改時間設成和該文件相同。
-
-q 不顯示指令執行過程。
-
-r 遞歸處理,將指定目錄下的所有文件和子目錄一並處理。
-
-S 包含系統和隱藏文件。
-
-t<日期時間> 把壓縮文件的日期設成指定的日期。
-
-T 檢查備份文件內的每個文件是否正確無誤。
-
-u 更換較新的文件到壓縮文件內。
-
-v 顯示指令執行過程或顯示版本信息。
-
-V 保存VMS操作系統的文件屬性。
-
-w 在文件名稱裏假如版本編號,本參數僅在VMS操作系統下有效。
-
-x<範本樣式> 壓縮時排除符合條件的文件。
-
-X 不保存額外的文件屬性。
-
-y 直接保存符號連接,而非該連接所指向的文件,本參數僅在UNIX之類的系統下有效。
-
-z 替壓縮文件加上註釋。
-
-$ 保存第一個被壓縮文件所在磁盤的卷冊名稱。
-
-<壓縮效率> 壓縮效率是一個介於1-9的數值。
unzip命令參數
-
-c 將解壓縮的結果顯示到屏幕上,並對字符做適當的轉換。
-
-f 更新現有的文件。
-
-l 顯示壓縮文件內所包含的文件。
-
-p 與-c參數類似,會將解壓縮的結果顯示到屏幕上,但不會執行任何的轉換。
-
-t 檢查壓縮文件是否正確。
-
-u 與-f參數類似,但是除了更新現有的文件外,也會將壓縮文件中的其他文件解壓縮到目錄中。
-
-v 執行是時顯示詳細的信息。
-
-z 僅顯示壓縮文件的備註文字。
-
-a 對文本文件進行必要的字符轉換。
-
-b 不要對文本文件進行字符轉換。
-
-C 壓縮文件中的文件名稱區分大小寫。
-
-j 不處理壓縮文件中原有的目錄路徑。
-
-L 將壓縮文件中的全部文件名改為小寫。
-
-M 將輸出結果送到more程序處理。
-
-n 解壓縮時不要覆蓋原有的文件。
-
-o 不必先詢問用戶,unzip執行後覆蓋原有文件。
-
-P<密碼> 使用zip的密碼選項。
-
-q 執行時不顯示任何信息。
-
-s 將文件名中的空白字符轉換為底線字符。
-
-V 保留VMS的文件版本信息。
-
-X 解壓縮時同時回存文件原來的UID/GID。
-
[.zip文件] 指定.zip壓縮文件。
-
[文件] 指定要處理.zip壓縮文件中的哪些文件。
-
-d<目錄> 指定文件解壓縮後所要存儲的目錄。
-
-x<文件> 指定不要處理.zip壓縮文件中的哪些文件。
-
-Z unzip -Z等於執行zipinfo指令。
使用舉例
把一個文件abc.txt和一個目錄dir1壓縮成為yasuo.zip:
# zip -r yasuo.zip abc.txt dir1
解壓縮:
# unzip yasuo.zip
我當前目錄下有abc1.zip,abc2.zip和abc3.zip,我想一起解壓縮它們:
# unzip abc\?.zip
註釋:?表示一個字符,如果用*表示任意多個字符。
我有一個很大的壓縮文件large.zip,我不想解壓縮,只想看看它裏面有什麽:
# unzip -v large.zip
我下載了一個壓縮文件large.zip,想驗證一下這個壓縮文件是否下載完全了
# unzip -t large.zip
我用-v選項發現music.zip壓縮文件裏面有很多目錄和子目錄,並且子目錄中其實都是歌曲mp3文件,我想把這些文件都下載到第一級目錄,而不是一層一層建目錄:
# unzip -j music.zip
xz
XZ Utils 是為 POSIX 平臺開發具有高壓縮率的工具。它使用 LZMA2 壓縮算法,生成的壓縮文件比 POSIX 平臺傳統使用的 gzip、bzip2 生成的壓縮文件更小,而且解壓縮速度也很快。最初 XZ Utils 的是基於 LZMA-SDK 開發,但是 LZMA-SDK 包含了一些 WINDOWS 平臺的特性,所以 XZ Utils 為以適應 POSIX 平臺作了大幅的修改。XZ Utils 的出現也是為了取代 POSIX 系統中舊的 LZMA Utils。
參數
-
-z 壓縮,而且這是默認的操作,也就是說沒有操作數的話 xz 加上文件就是壓縮!(unxz 可以用來解壓)
-
-d 解壓縮。和 -z 效果相反
-
-t, --test 測試壓縮文件的完整性,這個操作不會生成解壓縮文件。
-
-l, --list 這個操作會打印文件的信息,不會生成解壓縮文件!
-
-k 保持源文件不被刪除
舉例
壓縮一個文件 test.txt,壓縮成功後生成 test.txt.xz, 原文件會被刪除。
[root@hpf-linux test]# xz messages
[root@hpf-linux test]# ls
messages-20160131 messages-20160207 messages-20160312 messages-20160313 messages.xz test.sh
解壓 test.txt.xz 文件,並使用參數 -k 保持原文件不被刪除:
[root@hpf-linux test]# xz -k messages
[root@hpf-linux test]# ls
messages messages-20160131 messages-20160207 messages-20160312 messages-20160313 messages.xz test.sh
使用參數 -l 顯示 .xz 文件的基本信息。基本信息包括壓縮率、數據完整性驗證方式等。也可以和參數 -v 或 -vv 配合顯示更詳盡的信息。
$ xz -l index.txt.xz
Strms Blocks Compressed Uncompressed Ratio Check Filename
1 1 768 B 1,240 B 0.619 CRC64 index.txt.xz
使用參數 -0, -1, -2, … -6, … -9 或參數 --fast, --best 設定壓縮率。xz 命令的默認為 -6 ,對於大多數系統來說,甚至是一些較舊的系統,-4 … -6 壓縮率預設值都不錯的表現。
$ xz -k7 xz_pipe_decomp_mini.c
$ xz -k --fast xz_pipe_decomp_mini.c
和 tar 命令配合處理多個文件。一般來說,有兩種簡單的方法將 tar 和 xz 結合起來,一是使用管道,或是使用 tar 命令的參數‘J‘。兩種方法各自有各自的優點,第一種方法可以充分利用 xz 利用豐富的參數。而第二種方法使用起來更簡單容易。
詳細參考
tar
tar命令可以為linux的文件和目錄創建檔案。利用tar,可以為某一特定文件創建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。tar最初被用來在磁帶上創建檔案,現在,用戶可以在任何設備上創建檔案。利用tar命令,可以把一大堆的文件和目錄全部打包成一個文件,這對於備份文件或將幾個文件組合成為一個文件以便於網絡傳輸是非常有用的。
首先要弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件通過一些壓縮算法變成一個小文件。 為什麽要區分這兩個概念呢?這源於Linux中很多壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包(tar命令),然後再用壓縮程序進行壓縮(gzip bzip2命令)。
linux下最常用的打包程序就是tar了,使用tar程序打出來的包我們常稱為tar包,tar包文件的命令通常都是以.tar結尾的。生成tar包後,就可以用其它的程序來進行壓縮。
常見解壓/壓縮命令
tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(註:tar是打包,不是壓縮!)
.gz
解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName
.tar.gz 和 .tgz
解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName
.bz2
解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮: bzip2 -z FileName
.tar.bz2
解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
.zip
解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName
.rar
解壓:rar x FileName.rar
壓縮:rar a FileName.rar DirName
.xz
壓縮:xz FileName
解壓:xz -d FileName.xz
tar.xz
壓縮:tar Jcvf FileName.tar.xz DirName
解壓:tar Jxvf FileName.tar.xz
應用舉例
將文件全部打包成tar包:
[root@hpf-linux test]# tar -cvf messages1.tar messages
messages
[root@hpf-linux test]# tar -cvzf messages1.tar.gz messages
messages
[root@hpf-linux test]# tar -jcvf messages1.tar.bz2 messages
messages
[root@hpf-linux test]# tar -Jcvf messages1.tar.xz messages
messages
[root@hpf-linux test]# file messages1.tar
messages1.tar: POSIX tar archive (GNU)
[root@hpf-linux test]# file messages1.tar.gz
messages1.tar.gz: gzip compressed data, from Unix, last modified: Sun Mar 20 21:32:37 2016
[root@hpf-linux test]# file messages1.tar.bz2
messages1.tar.bz2: bzip2 compressed data, block size = 900k
[root@hpf-linux test]# file messages1.tar.xz
messages1.tar.xz: xz compressed data
說明:
tar -cvf messages1.tar messages 僅打包,不壓縮!
tar -zcvf messages1.tar.gz messages 打包後,以 gzip 壓縮
tar -jcvf messages1.tar.bz2 messages 打包後,以 bzip2 壓縮
tar -Jcvf messages1.tar.xz messages 打包後,以 xz 壓縮
在參數 f 之後的文件檔名是自己取的,我們習慣上都用 .tar 來作為辨識。 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar包; 如果加 j 參數,則以 .tar.bz2 來作為tar包名。
查閱上述 tar包內有哪些文件:
[root@hpf-linux test]# tar -jtvf messages1.tar.gz
bzip2: (stdin) is not a bzip2 file.
tar: Child returned status 2
tar: Error is not recoverable: exiting now
[root@hpf-linux test]# tar -ztvf messages1.tar.gz
-rw------- root/root 411945 2016-03-18 23:09 messages
[root@hpf-linux test]# tar -Jtvf messages1.tar.xz
-rw------- root/root 411945 2016-03-18 23:09 messages
由於我們使用 gzip 壓縮的messages1.tar.gz,所以要查閱messages1.tar.gz包內的文件時,就得要加上 z 這個參數了,同理查看messages1.tar.xz包內的內容就要用J參數。
只將 打包內容內的部分文件解壓出來:
[root@hpf-linux test]# tar -cvzf messages.tar.gz messages-20160207 messages-20160313
messages-20160207
messages-20160313
[root@hpf-linux test]# tar -tvzf messages.tar.gz
-rw------- root/root 206250 2016-03-18 23:09 messages-20160207
-rw------- root/root 323420 2016-03-18 23:09 messages-20160313
[root@hpf-linux test]# cp messages.tar.gz ../tartest/
[root@hpf-linux test]# cd ../tartest/
[root@hpf-linux tartest]# ls
messages.tar.gz
[root@hpf-linux tartest]# tar -xzvf messages.tar.gz messages-20160207
messages-20160207
[root@hpf-linux tartest]# ls -lh
總用量 272K
-rw-------. 1 root root 202K 3月 18 23:09 messages-20160207
-rw-r--r--. 1 root root 67K 3月 20 21:50 messages.tar.gz
將文件解壓到一個指定的目錄或路徑:
[root@hpf-linux tartest]# tar -xvzf messages.tar.gz -C /tmp/
messages-20160207
messages-20160313
[root@hpf-linux tartest]# ls /tmp/messages-20160*
/tmp/messages-20160207 /tmp/messages-20160313
使用通配符來解壓多個文件:
# tar -xz -f abc.tar.gz --wildcards "*.txt"
在添加文件之前進行確認:
一個有用的選項是“w”,該選項使得tar命令在添加每個文件到歸檔文件之前來讓用戶進行確認,有時候這會很有用。 使用該選項時,只有用戶輸入“y”時的文件才會被加入到歸檔文件中,如果你不輸入任何東西,其默認表示是一個“n”。
# tar -czw -f abc.tar.gz ./new/*
通過tar來進行備份:
一個真實的場景是在固定的時間間隔內來備份目錄,tar命令可以通過cron調度來實現這樣的一個備份,以下是一個樣例 :
# tar -cvz -f archive-$(date +%Y%m%d).tar.gz ./new/
使用cron來運行上述的命令會保持創建類似以下名稱的備份文件 :‘archive-20150218.tar.gz‘。 當然,需要確保日益增長的歸檔文件不會導致磁盤空間的溢出。
加入文件到存在的歸檔文件中 :
“r”選項可以被用來將文件加入到已存在的歸檔文件中,而不用創建一個新的歸檔文件,下面是一個簡單的樣例:
# tar -rv -f abc.tar abc.txt
註意:文件並不能加入到已壓縮的歸檔文件中(gz 或 bzip)。文件只能被加入到普通的歸檔文件中。
將文件加入到壓縮的歸檔文件中(tar.gz/tar.bz2):
之前已經提到了不可能將文件加入到已壓縮的歸檔文件中,然而依然可以通過簡單的一些把戲來完成。使用gunzip命令來解壓縮歸檔文件,然後將文件加入到歸檔文件中後重新進行壓縮。
# gunzip archive.tar.gz
# tar -rf archive.tar ./path/to/file
# gzip archive.tar
在文件夾當中,比某個日期新的文件才備份:
# tar -N "2012/11/13" -zcvf log17.tar.gz test
備份文件夾內容是排除部分文件:
[root@hpf-linux tmp]# tree tartest/
tartest/
├── messages-20160207
├── messages-20160313
└── messages.tar.gz
0 directories, 3 files
[root@hpf-linux tmp]# tar --exclude messages.tar.gz -cvzf /tmp/tartest.tar.gz tartest/
tartest/
tartest/messages-20160313
tartest/messages-20160207
[root@hpf-linux tmp]# tar -tzvf tartest.tar.gz
drwxr-xr-x root/root 0 2016-03-20 22:21 tartest/
-rw------- root/root 323420 2016-03-18 23:09 tartest/messages-20160313
-rw------- root/root 206250 2016-03-18 23:09 tartest/messages-20160207
分類: Linux
https://www.cnblogs.com/cuchadanfan/p/6260470.html
Linux打包壓縮