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