linux下最常用的打包程序就是 tar 了,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩。
1、tar命令格式
1 | tar[必要参数][选择参数][文件] |
命令功能
用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的
tar命令常用参数
必要参数有如下: | |
---|---|
-A | 新增压缩文件到已存在的压缩 |
-B | 设置区块大小 |
-c | 建立新的压缩文件 |
-d | 记录文件的差别 |
-r | 添加文件到已经压缩的文件 |
-u | 添加改变了和现有的文件到已经存在的压缩文件 |
-x | 从压缩的文件中提取文件 |
-t | 显示压缩文件的内容 |
-z | 支持gzip解压文件 |
-j | 支持bzip2解压文件 |
-Z | 支持compress解压文件 |
-v | 显示操作过程 |
-l | 文件系统边界设置 |
-k | 保留原有文件不覆盖 |
-m | 保留文件不被覆盖 |
-W | 确认压缩文件的正确性 |
可选参数如下: | |
-b | 设置区块数目 |
-C | 切换到指定目录 |
-f | 指定压缩文件 |
–help | 显示帮助信息 |
–version | 显示版本信息 |
2、常见解压/压缩命令
.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
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
3、常用示例
实例1:将文件全部打包成tar包
1 | tar -cvf log.tar log2012.log |
在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar包; 如果加 j 参数,则以 .tar.bz2 来作为tar包名。
实例2: 查看tar包内有哪些文件
1 | tar -ztvf log.tar.gz |
由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上 z 这个参数了。
实例3:只将tar包内的部分文件解压出来
1 | tar -zxvf log.tar.gz log2012.log |
我可以透过 tar -ztvf 来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!
实例4: 文件备份下来,并且保存其权限
1 | tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log |
这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时
实例5: 在文件夹当中,比某个日期新的文件才备份
1 | tar -N "2012/11/13" -zcvf log17.tar.gz test |
实例6: 备份文件夹内容是排除部分文件
1 | tar --exclude scf/service -zcvf scf.tar.gz scf/* |
实例7: 将文件解压到指定目录下
1 | tar zxvf test.tgz -C /tmp |
把需要解压的目的目录放到-C后面就可以了,也就是这里的/tmp
实例8:检查.gz包是否完整
1 | gunzip -vt log17.tar.gz |