2018-12-22
1381 次阅读
打包和压缩与解压缩是我们在使用Linux系统中经常要进行的操作,这篇文章记录以下Linux常用打包压缩命令tar、zip、gzip、bzip2的使用方法
## tar
tar是一种打包命令,可以将多个文件或目录打包成一个文件,同时还可以通过gzip/bzip2的支持,将该文件进行压缩。
- 参数说明
```shell
[root@www ~]# tar [-j|-z][cv][-f 新建的文件名] filename... <==打包与压缩
[root@www ~]# tar [-j|-z][tv][-f 新建的文件名] <==查看文件名
[root@www ~]# tar [-j|-z][xv][-f 新建的文件名] [-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 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他会使用到的选项介绍:
--exclude=FILE:在压缩的过程中,不要将FILE 打包!
```
- 打包
打包一个或多个文件到一个tar包,不进行压缩
```shell
#打包test1.txt和test2.txt为test.tar
tar -cvf test.tar test1.txt test2.txt
#打包test目录下所有文件
tar -cvf test.tar test/*
#打包当前目录下所有以.log结尾的文件
tar -cvf test.tar *.log
```
- 打包并压缩
对一个或多个文件打包并压缩
```shell
#打包flle1和file2,并以gzip压缩
tar -zcvf test.tar.gz file1 file2
#打包file1和file2,并以bzip2压缩
tar -jcvf test.tar.bz2 file1 file2
```
- 查看打包中的文件
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数
```shell
#可查看test包中有哪些文件
tar -tvf test.tar
```
- 打包后删除源文件
```shell
tar -zcvf test.tar.gz test.log --remove-files
```
- 向tar包中增加文件
```shell
#在test.tar包中增加文件file,只针对tar包
tar -rf test.tar file
```
- 打包除指定目录或文件以外的文件
```shell
#打包test目录下所有文件,排除以.log结尾的文件
tar -zcvf test.tar.gz --exclude=test/*.log test/*
```
- 删除压缩包中的文件
在不解压的情况下,可使用–delete选项删除包中的文件
```shell
#从test.tar中删除test1文件
tar --delete -f test.tar test1
```
- 解压缩
解压tar.gz\tar\tar.bz2包到当前目录
```shell
tar -zxvf test.tar.gz
tar -xvf test.tar
tar -jxvf test.tar.bz2
```
解压tar.gz\tar\tar.bz2包到指令目录
```shell
tar -zxvf test.tar.gz [-C 指定目录]
tar -xvf test.tar [-C 指定目录]
tar -jxvf test.tar.bz2 [-C 指定目录]
```
- 解压包中指定的文件
例如test.tar.gz中有以下文件
```
hello.txt
log/
log/1.log
log/2.log
log/3.log
log/4.log
log/5.log
```
如果要解压其中的1.log
```shell
tar -zxvf test.tar.gz log/1.log
```
## zip/unzip
zip和unzip指令用于处理.zip文件
- zip参数
```shell
-d :从压缩文件内删除指定的文件。
-f :此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-j :只保存文件名称及其内容,而不存放任何目录名称。
-r :递归处理,将指定目录下的所有文件和子目录一并处理。
-u :更换较新的文件到压缩文件内。
-v :显示指令执行过程或显示版本信息。
- 压缩效率是一个介于1-9的数值。
```
- 压缩
```shell
#打包test目录下的文件
zip -r test.zip test
#打包test目录下文件,且压缩包不带test目录
zip -rj test.zip test
```
- 指定压缩率压缩文件
```shell
#数值(1-9)越大,压缩率越高,耗时越长
zip -r8 test.zip test
```
- 向压缩包中增加文件
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u
```shell
#向test.zip 包中增加test1文件
zip -u test.zip test1
```
- 压缩时加密
压缩时如果需要对压缩包进行加密,可使用-P参数
```shell
#使用密码123456加密
zip -r test.zip test1 test -P 123456
```
- 删除压缩包中特定文件
```shell
#删除test.zip包中的file1文件
zip -d test.zip file1
```
- unzip参数
```shell
-l :显示压缩文件内所包含的文件
-j :只保存文件名称及其内容,而不存放任何目录名称。
-o :以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
-v :显示指令执行过程或显示版本信息。
-d :指定解压目录,目录不存在会创建
```
- 解压
```shell
#把test.zip解压到dir目录
unzip test.zip -d dir
unzip java.jar -d dir
```
- 查看压缩包中的文件
```shell
#可以看到压缩包中的文件名,日期等信息
unzip -l test.zip
#查看更多信息,例如crc校验信息等
unzip -v test.zip
```
## gzip
- 参数
```shell
-k :保留源文件
-d :解开压缩文件
-r :递归处理,将指定目录下的所有文件及子目录一并处理
-v :显示指令执行过程
```
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩
- 压缩
```shell
#当前目录下所有文件进行压缩,每个文件一个gz包
gzip -k ./*
#递归压缩
gzip -rkv ./*
```
- 解压
```shell
gzip -dv test.gz
```
## bzip2
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数
- 压缩与解压
```shell
#压缩test文件
bzip2 -zk test
#解压
bzip2 -dk test.bz2
```
如果您对此页面有任何问题或建议,请在本站留言,或联系邮箱me[at]zkk.me
本网站部分内容转载自其他网站,如有侵权,请立即联系站长进行修改