Linux-tar

5.打包與壓縮

本章同步視頻:https://edu.51cto.com/sd/e4874

5.2 打包指令: tar

5.2.1 tar語法

[dmtsai@study ~]$ tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename...<==打包與壓縮

[dmtsai@study ~]$ tar [-z|-j|-J] [tv] [-f 既有的 tar檔名]            <==察看檔名

[dmtsai@study ~]$ tar [-z|-j|-J] [xv] [-f 既有的 tar檔名] [-C 目錄]  <==解壓縮

選項與參數:

-c  :建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename)

-t  :察看打包檔案的內容含有哪些檔名,重點在察看『檔名』就是了;

-x  :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開

特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。

-z  :透過gzip的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.gz

-j  :透過 bzip2 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.bz2

-J  :透過xz的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.xz

特別留意, -z, -j, -J 不可以同時出現在一串指令列中

-v  :在壓縮/解壓縮的過程中,將正在處理的文件名顯示出來!

-f filename:-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!(比較不會忘記)

-C 目錄:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。

5.2.2 tar打包與壓縮

1.直接打包(不壓縮)

[root@localhost tmp]# tar -cvf dir.tar dir/

dir/

dir/passwd

dir/passwd.xz

dir/passwd.9.xz

#如果不帶v,則不會有上面4行的輸出。

2.用gzip壓縮

[root@localhost tmp]# tar -zcv -f dir.tar.gz dir/

dir/

dir/passwd

dir/passwd.xz

dir/passwd.9.xz

dir/dir.tar.gz

3.用bzip2壓縮

[root@localhost tmp]# tar -jvc -f dir.tar.bz dir/

dir/

dir/passwd

dir/passwd.xz

dir/passwd.9.xz

dir/dir.tar.gz

4.用xz壓縮

[root@localhost tmp]# tar -Jcv -f dir.tar.xz dir/

dir/

dir/passwd

dir/passwd.xz

dir/passwd.9.xz

dir/dir.tar.gz

5.三種壓縮對比

[root@localhost tmp]# ll

total 36

drwxrwxrwx. 2 root root    70 Mar 30 22:05 dir

-rw-r--r--. 1 root root 10240 Mar 30 22:01 dir.tar

-rw-r--r--. 1 root root  2541 Mar 30 22:07 dir.tar.bz

-rw-r--r--. 1 root root  2093 Mar 30 22:05 dir.tar.gz

-rw-r--r--. 1 root root  1956 Mar 30 22:08 dir.tar.xz

#tar包比原文件大屬於正常情況

5.2.3 查看打包內容

1.查看gzip壓縮的tar包

[root@localhost tmp]# tar -ztv -f dir.tar.gz

drwxrwxrwx root/root         0 2020-03-30 22:05 dir/

-rw-r--r-- root/root      2003 2020-03-30 21:05 dir/passwd

-rw-r--r-- root/root       864 2020-03-30 21:05 dir/passwd.xz

-rw-r--r-- root/root       864 2020-03-30 21:46 dir/passwd.9.xz

-rw-r--r-- root/root        45 2020-03-30 22:05 dir/dir.tar.gz

2.查看bzip2壓縮的tar包

[root@localhost tmp]# tar -jtv -f dir.tar.bz

drwxrwxrwx root/root         0 2020-03-30 22:05 dir/

-rw-r--r-- root/root      2003 2020-03-30 21:05 dir/passwd

-rw-r--r-- root/root       864 2020-03-30 21:05 dir/passwd.xz

-rw-r--r-- root/root       864 2020-03-30 21:46 dir/passwd.9.xz

-rw-r--r-- root/root        45 2020-03-30 22:05 dir/dir.tar.gz

3.查看xz壓縮的tar包

[root@localhost tmp]# tar -Jtv -f dir.tar.xz

drwxrwxrwx root/root         0 2020-03-30 22:05 dir/

-rw-r--r-- root/root      2003 2020-03-30 21:05 dir/passwd

-rw-r--r-- root/root       864 2020-03-30 21:05 dir/passwd.xz

-rw-r--r-- root/root       864 2020-03-30 21:46 dir/passwd.9.xz

-rw-r--r-- root/root        45 2020-03-30 22:05 dir/dir.tar.gz

4.查看未壓縮的tar包

[root@localhost tmp]# tar -tv -f dir.tar

drwxrwxrwx root/root         0 2020-03-30 21:46 dir/

-rw-r--r-- root/root      2003 2020-03-30 21:05 dir/passwd

-rw-r--r-- root/root       864 2020-03-30 21:05 dir/passwd.xz

-rw-r--r-- root/root       864 2020-03-30 21:46 dir/passwd.9.xz

5.2.4 解壓

1.解壓tar包到當前目錄

[root@localhost tmp]# tar -xv -f dir.tar

dir/

dir/passwd

dir/passwd.xz

dir/passwd.9.xz

2.解壓tar包到指定目錄

[root@localhost tmp]# tar -xv -f dir.tar -C /root

dir/

dir/passwd

dir/passwd.xz

dir/passwd.9.xz

3.解壓gzip壓縮的tar包

[root@localhost tmp]# tar -zvx -f dir.tar.gz    #解壓到當前目錄

[root@localhost tmp]# tar -zvx -f dir.tar.gz -C /root   #解壓到/root

4.解壓bzip2壓縮的tar包

[root@localhost tmp]# tar -jvx -f dir.tar.bz    #解壓到當前目錄

[root@localhost tmp]# tar -jvx -f dir.tar.bz -C /root   #解壓到/root

5.解壓xz壓縮的tar包

[root@localhost tmp]# tar -Jvx -f dir.tar.xz    #解壓到當前目錄

[root@localhost tmp]# tar -Jvx -f dir.tar.xz -C /root   #解壓到/root

5.2.5 特殊用法

1.解壓部分文件

[root@localhost tmp]# tar -t -f dir.tar    #查看壓縮文件

dir/

dir/passwd

dir/passwd.xz

dir/passwd.9.xz

[root@localhost tmp]# ll dir     #查看dir源目錄裏的內容(用於驗證實驗)

total 12

-rw-r--r--. 1 root root  45 Mar 30 22:05 dir.tar.gz

-rw-r--r--. 1 root root 864 Mar 30 21:46 passwd.9.xz

-rw-r--r--. 1 root root 864 Mar 30 21:05 passwd.xz

[root@localhost tmp]# tar -xv -f dir.tar dir/passwd    #解壓指定文件

dir/passwd

[root@localhost tmp]# ll dir     #再次查看dir源目錄裏的內容

total 16

-rw-r--r--. 1 root root   45 Mar 30 22:05 dir.tar.gz

-rw-r--r--. 1 root root 2003 Mar 30 21:05 passwd

-rw-r--r--. 1 root root  864 Mar 30 21:46 passwd.9.xz

-rw-r--r--. 1 root root  864 Mar 30 21:05 passwd.xz

#注:如果tar包是被壓縮的,需要帶對應的選項z/j/J。

2.打包某目錄,但不含該目錄下的某些檔案

[root@localhost tmp]# ll dir

total 12

-rw-r--r--. 1 root root  45 Mar 30 22:05 dir.tar.gz

-rw-r--r--. 1 root root 864 Mar 30 21:46 passwd.9.xz

-rw-r--r--. 1 root root 864 Mar 30 21:05 passwd.xz

[root@localhost tmp]# tar -Jcv -f dir.tar.xz --exclude=dir/passwd.xz dir/

dir/

dir/dir.tar.gz

dir/passwd.9.xz

[root@localhost tmp]# tar -Jtv -f dir.tar.xz

drwxrwxrwx root/root         0 2020-03-30 22:34 dir/

-rw-r--r-- root/root        45 2020-03-30 22:05 dir/dir.tar.gz

-rw-r--r-- root/root       864 2020-03-30 21:46 dir/passwd.9.xz

3.只打包比某個時間更近的文件

[root@localhost tmp]# touch -m -d "20200501" dir/passwd.xz 

#修改passwd.xz的時間戳

[root@localhost tmp]# ll dir

total 12

-rw-r--r--. 1 root root  45 Mar 30 22:05 dir.tar.gz

-rw-r--r--. 1 root root 864 Mar 30 21:46 passwd.9.xz

-rw-r--r--. 1 root root 864 May  1  2020 passwd.xz

[root@localhost tmp]# tar -jcv -f dir.tar.bz2 --newer-mtime="20200404" dir

#只備份2020-4-4以後的文件

tar: Option --newer-mtime: Treating date `20200404' as 2020-04-04 00:00:00

dir/    #備份

tar: dir/dir.tar.gz: file is unchanged; not dumped    #未備份

dir/passwd.xz    #備份

tar: dir/passwd.9.xz: file is unchanged; not dumped   #未備份

[root@localhost tmp]# ll

total 16

drwxrwxrwx. 2 root root   57 Mar 30 22:50 dir

-rw-r--r--. 1 root root 1296 Mar 30 22:52 dir.tar.bz2   #備份文件

-rw-r--r--. 1 root root 1144 Mar 30 22:36 dir.tar.xz

-rwxrw----. 1 root root    6 Mar 19 10:24 root

-rw-r--r--. 1 root root   65 Mar 12 11:04 test

[root@localhost tmp]# tar -jtv -f dir.tar.bz2   #查看備份文件的內容

drwxrwxrwx root/root         0 2020-03-30 22:50 dir/

-rw-r--r-- root/root       864 2020-05-01 00:00 dir/passwd.xz


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章