前言
tar
是 linux 上常用的、可以为文件和目录创建档案的一个程序(可以理解为文件打包)。利用它可以为某一特定文件创建档案(备份/压缩文件),在创建档案之后您还可以改变档案中的文件内容或向档案中追加新的文件等操作。
利用 tar
命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输,tar
工具都是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip
bzip2命令)。
tar
和 gzip
工具的区别: tar 是一个文件归档工具,它可以对文件或目录进行操作,而 gzip
是一个文件压缩工具,只能对文件进行操作,不能操作目录。
语法规则
tar [选项] [文件]
注:其中[文件]部分可以是文件列表或目录
参数介绍:
-A 或 --catenate:新增文件到以存在的备份文件;
-B :设置区块大小;
-c 或 --create:建立新的备份文件;
-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d :记录文件的差别;
-x 或 --extract或--get:从备份文件中还原文件;
-t 或 --list:列出备份文件的内容;
-z 或 --gzip或--ungzip:通过gzip指令处理备份文件;
-Z 或 --compress或--uncompress:通过compress指令处理备份文件;
-f<备份文件> 或 --file=<备份文件>:指定备份文件;
-v 或 --verbose:显示指令执行过程;
-r :添加文件到已经压缩的文件;
-u :添加改变了和现有的文件到已经存在的压缩文件;
-j :支持bzip2解压文件;
-v :显示操作过程;
-l :文件系统边界设置;
-k :保留原有文件不覆盖;
-m :保留文件不被覆盖;
-w :确认压缩文件的正确性;
-p 或 --same-permissions:用原来的文件权限还原文件;
-P 或 --absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;
-N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
--exclude=<范本样式>:排除符合范本样式的文件。
操作演示
本演示分为“仅归档”和“归档+压缩”和“高级用法”三部分。
(1)【仅归档】部分演示
将文件打包成tar包:
tar -cvf my.tar aa.txt # 将 aa.txt 文件打包,包名为 my.tar
tar -cvf my_dir.tar aadir # 将 aadir 目录打包,包名为 my_dir.tar(子文件也会归档)
tar -cvf all_file.tar * # 将当前目录下的所有文件打包,包名为all_file.tar
列出包中含有的文件:
tar -tvf aa.tar # 查看 aa.tar 包中包含的文件
拆分包文件:
tar -xvf aa.tar # 将 aa.tar 包中的文件拆分出来
tar -xvf aa.tar test.jpg # 将aa.tar包中,指定的test.jpg文件拆分出来
(2)【归档+压缩】部分演示
说明:本部分会通过 “tar 命令” + “gzip 命令”的方式,完成文件存档和压缩。
将文件归档(打包)并压缩:
# 将 aa.txt 文件打包,包名为 my.tar.gz,并且使用gzip工具进行压缩
tar -zcvf my.tar.gz aa.txt
# 将 aadir 目录打包,包名为 my_dir.tar.gz(子文件也会归档),并且使用gzip工具进行压缩
tar -zcvf my_dir.tar.gz aadir
# 将当前目录下的所有文件打包,包名为all_file.tar.gz,并且使用gzip工具进行压缩
tar -zcvf all_file.tar.gz *
列出已压缩包中含有的文件:
tar -ztvf aa.tar.gz # 查看 aa.tar.gz 压缩包中包含的文件
解压包文件:
tar -zxvf aa.tar.gz # 将 aa.tar.gz 包中的文件拆分出来
tar -zxvf aa.tar.gz test.jpg # 将aa.tar.gz 包中,指定的test.jpg文件拆分出来
小结: “仅归档”和“归档+压缩”两部分的使用,仅在“选项”中和命名上有所差异。“归档+压缩”的使用,只是在“选项”上多了一个 z
参数,名为在tar的基础上追加 .gz
结尾。
高级用法
用于备份文件,并且保存为原有权限:
tar -zcvpf all_log.tar.gz log2014.log log2015.log # 备份 log2014.log 和 log2015.log 文件
注:这个 -p
的属性是很重要的,它可以继承(保存)源文件所拥有的权限。
在文件夹当中,比某个日期新的文件才备份:
tar -N "2012/11/13" -zcvf weblog.tar.gz test
解释: 备份 test 目录 创建日期比2012/11/13晚 的文件,将其进行压缩,压缩后文件名为 weblog.tar.gz 。
备份文件夹内容时排除指定部分文件:
tar --exclude scf/service -zcvf scf.tar.gz scf/*
解释:备份 scf 目录下的所有文件( scf/service 目录的文件除外),备份后进行压缩,压缩后文件名为: scf.tar.gz 。
1 条评论
文章写的不错,学习了,谢谢!