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

点赞