每天一条Linux命令(18) tar (打包备份)


在Linux系统中,命令tar用于将多个文件打包在一起,也可以实现解压被打包的文件,对于多个文件的打包与解压均适用。

打包与压缩的区别:

打包是指将多个文件或目录汇总为一个文件;

压缩则是指将多个文件通过特定的算法变成一个小文件。


语法:

tar [选项] [文件]

参数说明:

  • -z 通过gzip压缩或解压

  • -c 创建新的tar包

  • -v 显示详细的tar命令执行过程

  • -f 指定压缩文件的名称

  • -t 不解压查看tar包的内容

  • -p 保持文件的原有属性

  • -P(大写) 以绝对路径打包,危险参数

  • -j 通bzip2 命令压缩或解压

  • -x 解开tar包

  • -C 指定解压的目录路径

  • -exclude=PATTERN 打包是排除不需要处理的文件或目录 

  • -X 文件名 从指定文件读取不需要处理的文件或目录列表

  • -N 日期 仅打包比指定日期新的文件,可用于增量打包备份

  • -h 打包软链接文件指向的真实源文件

  • --hard-dereference  打包硬链接文件

【注】:tar命令有些特殊,对于CentOS来说 -z 参数和 z参数(不带杠)效果是一样的


案例:

将当前目录下的所有文件打包

[root@master test02]# ls10.py  1.py  2.py  3.py  4.py  5.py  6.py  7.py  8.py  9.py[root@master test02]# tar -zcvf test.tar.gz ./* ./10.py./1.py./2.py./3.py./4.py./5.py./6.py./7.py./8.py./9.py[root@master test02]# ls   # 可以发现当前目录下多了个 test.tar.gz包10.py  1.py  2.py  3.py  4.py  5.py  6.py  7.py  8.py  9.py  test.tar.gz[root@master test02]#

-t参数不解压查看tar包的内容  (注意参数变化)

[root@master test02]# tar -ztvf test.tar.gz-rw-r--r-- root/root       172 2020-08-10 14:02 ./10.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./1.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./2.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./3.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./4.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./5.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./6.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./7.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./8.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./9.py[root@master test02]# 

-x参数 解开压缩包

[root@master test02]# ls test.tar.gz[root@master test02]# tar -zxvf test.tar.gz -C ../ # 解压到上级目录下./10.py./1.py./2.py./3.py./4.py./5.py./6.py./7.py./8.py./9.py[root@master test02]# ls ../  # 查看上级目录列表10.py  1.py  2.py  3.py  4.py  5.py  6.py  7.py  8.py  9.py  datapro  test  test01  test02[root@master test02]# 

排除某个文件打包

[root@master test02]# tree  # 先查看目录结构.├── 10.py├── 1.py├── 2.py├── 3.py├── 4.py├── 5.py├── 6.py├── 7.py├── 8.py├── 9.py└── bear    └── hahaha
2 directories, 10 files[root@master test02]# ls10.py  1.py  2.py  3.py  4.py  5.py  6.py  7.py  8.py  9.py  bear[root@master test02]# tar -zcvf test.tar.gz ./* --exclude=./bear/hahaha./10.py                # --exclude后面跟的是要排除的文件./1.py./2.py./3.py./4.py./5.py./6.py./7.py./8.py./9.py./bear/[root@master test02]# tar -ztvf test.tar.gz  不解压查看打包内容-rw-r--r-- root/root       172 2020-08-10 14:02 ./10.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./1.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./2.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./3.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./4.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./5.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./6.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./7.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./8.py-rw-r--r-- root/root         0 2020-08-10 14:01 ./9.pydrwxr-xr-x root/root         0 2020-08-10 14:13 ./bear/ [root@master test02]#  上述结果可以看到 排除了 hahaha目录

经验:

若需要打包的目录为相对路径,则--exclude后只能接相对路径。·若需要打包的目录为绝对路径,则--exclude后既能接绝对路径也能接相对路径。·为方便起见,--exclude的后接路径和打包路径应保持形式一致,要么都是相对路径,要么都是绝对路径。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页