打包和压缩与解压缩是我们在使用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