歲月留聲

Linux 打包压缩 tar、gzip、bzip2、xz、zip、unzip 使用说明

最近改了以下 VPS 备份脚本,发现脚本中 tar 压缩部分参数有错,一直使用 .tar.xz 后缀,但是压缩参数却没有 J……找到一篇文章:linux 打包压缩 tar、gzip、bzip2、xz、zip、unzip,才改过来了。

「Linux 打包压缩 tar、gzip、bzip2、xz、zip、unzip 使用说明:https://0xo.net/426」

Linux 打包压缩 tar、gzip、bzip2、xz、zip、unzip 使用说明 - 第1张图片

下面把文章贴过来备忘:

gzip

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

「Linux 打包压缩 tar、gzip、bzip2、xz、zip、unzip 使用说明:https://0xo.net/426」
-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 最快!

使用示例:

「Linux 打包压缩 tar、gzip、bzip2、xz、zip、unzip 使用说明:https://0xo.net/426」
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

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

「Linux 打包压缩 tar、gzip、bzip2、xz、zip、unzip 使用说明:https://0xo.net/426」

常用命令选项:

-c        #打包
-x        #解包解压缩
-t        #查看
-v        #显示详细信息
--exclude        #排除
-C        #指定目录
-T        #从文件里获取需要打包的文件路径集合

3 种压缩格式,压缩率从低到高:

#一般选用 bzib2 足已,xz 压缩率高但是压缩速度偏慢

-z    gzip
-j    bzib2
-J    xz

使用示例:

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

#只查看第一层文件目录

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 '*/*/*'

退出移动版