linux 打包压缩tar、gzip、bzip2、xz、zip、unzip

gzip

gzip是为了取代compress 并提供更好的压缩比,zcat/zmore/zless用来查看压缩文件

-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
gzip glibc                         #不保留老文件
gzip glibc -c > glibc.gz           #保留老文件
gzip -d glibc.gz                   #解压缩不保留包文件
gzip -dc glibc.gz > /root/glibc    #保留老文件并指定目录
cat file1 file2 | gzip > foo.gz    #压缩多个文件
gzip -cd old.gz | gzip > new.gz    #重新压缩

bzip2

bzip2 比 gzip 提供更好的压缩比,bzcat/bzmore/bzless/bzgrep用来查看压缩文件

-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
bzip2 glibc
bzip2 -k glibc        #保留原来
bzip2 -dc glibc.bz2 > /root/glibc    #解压缩保留原来并重定向到文件

xz

虽然 bzip2 已经具有很棒的压缩比,不过显然某些自由软件开发者还不满足,因此后来还推出了 xz 这个压缩比更高的软件,但是这个压缩命令压缩速度偏慢,如果不是对压缩率有特别需求,使用bzip2就够了!这个软件的用法也跟 gzip/bzip2 几乎一模一样。

-d :解压缩!
-t :测试压缩文件的完整性,看有没有错误
-l :列出压缩文件的相关信息
-k :保留原本的文件不删除~
-c :同样的,就是将数据由屏幕上输出的意思!
-# :同样的,也有较佳的压缩比的意思!
xz  glibc
xz  -k  glib    c#保留原来
xz  -dc  glibc.bz2  >  /root/glibc    #解压缩保留原来并重定向到文件

tar

配合上述压缩可以对文件目录进行打包并压缩

###bash###
#常用命令选项
-c        #打包
-x        #解包解压缩
-t        #查看
-v        #显示详细信息
--exclude        #排除
-C        #指定目录

-T        #从文件里获取需要打包的文件路径集合

#3种压缩格式,压缩率从低到高
#一般选用bzib2足已,xz压缩率高但是压缩速度偏慢
-z    gzip
-j    bzib2
-J    xz
###bash###
tar -cvf glibc.tar *      #打包当前目录(注意不会打包隐藏文件如.ssh)

#将当前目录所有打包为glibc.tar(过滤掉dir目录,扩展名为png,jpg的文件)
tar -cvf glibc.tar * --exclude dir --exclude '*.png' --exclude '*.jpg'

tar -cvzf glibc.tar.gz glibc a.txt                   #打包并以gzip压缩glibc,a.txt
tar -cvjf glibc.tar.bz2  glibc a.txt                 #打包并以bzib2压缩glibc,a.txt
tar -cvJf glibc.tar.xz  glibc b.txt                  #打包并以xz压缩glibc,a.txt

#解包--解压缩到/root目录
tar  -zxvf  glibc.tar.gz  -C  /root                #gzip
tar  -jxvf  glibc.tar.bz2  -C  /root               #bzib2
tar  -Jxvf  glibc.tar.xz  -C  /root                 #xz

#自动判断
tar -xvf glibc.tar.xx -C /root

#查看包内容
tar  -tvf glibc.tar.bz2
###bash###
#只查看第一层文件目录
tar  --exclude="*/*"  -tvf glibc.tar.bz2

#只打包隐藏文件(文件名第一个是.第二个是非.)
tar -cvf /tmp/aaa.tar .[!.]*

#打包全部(包含隐藏文件)
#ls -A不会列出. ..两个目录
tar -cvf /tmp/bbb.tar `ls -A`

#配合find有时候更容易,比如只打包.c .h文件
find ./ -name "*.c" -o -name "*.h" | xargs tar -cvjf /tmp/xxx.tar.bz2

#内容太大还是不行(打包出来不准确或者报argument line too long),可以分两步,先存文件,然后打包文件里指定的路径
find ./ -name "*.c" -o -name "*.h" > out.txt
tar -cvjf /tmp/xxx.tar.bz2 -T out.txt

zip

zip 命令为打包压缩命令,一般为了跟 windows 交互才会用的,不涉及 windows 推荐使用tar配合 gzip,bzip2,xz

#常用命令选项
-d       从压缩文件内删除指定的文件。
-m       把文件移到压缩文件中。
-0-9     压缩比
-r       递归处理,所有文件和子目录一并处理。
-x<范本样式>       压缩时排除符合条件的文件。
-c       交互为每一个文件设置注释
-z       交互多行注释,英文句话.来表示结束
-e       交互设置密码
-P       直接设置密码
zip test.zip test.txt       #添加压缩文件
zip test.zip test1.txt      #移动文件到压缩包
zip -d test.zip test.txt    #删除test.txt

zip -r test.zip ./*         #压缩当前全部文件到test.zip
zip test2.zip test2/*       #打包目录
zip test3.zip tests/* -x tests/ln.log      #压缩目录,除了tests/ln.log

zip -r test.zip ./* -P 123      #设置密码(明文设置密码不太安全)
zip -r test.zip ./* -e           #交互设置密码(安全)

#设置压缩比
#-0不压缩,-9最高压缩,默认为-6
zip test.zip test.txt -6

unzip

-d     指定目录
-n     解压时不覆盖
-o     不询问直接覆盖
-l     显示压缩文件内所包含的文件。
-v     显示压缩文件内所包含的文件。
-x     指定不要处理哪些文件。

-P      解压缩密码
#解压到当前目录并直接覆盖
unzip -o test1.zip

#指定解压目录
unzip test1.zip -d /tmp/

#解压特定文件
unzip test1.zip inc abc

#查看zip包里所有文件
unzip -l test.zip

#只查看zip包里第1级文件或目录
unzip -l test.zip -x '*/*/*'
THE END