linux 中常用的压缩指令
压缩 gzip bzip2 xz , 解压gunzip unxz bunzip2 解压对应的压缩包 *.tar.gz *.tar.xz *.tar.bz2(由于 compress 效率底下,已经丢弃不用啦)
选项与参数
1. -c --stdout --to-stdout 将压缩的结果输出标准输出上,即屏幕。
2. -d --decompress --uncompress 将压缩包解压缩,解压缩指令不支持该选项
3. -v --verbose 过程中显示详细信息,文件名和压缩比等信息
4. -r --recursive 递归压缩目录及目录下的文件
5. -# --fast --best 指明压缩等级, # 代表数字 [1-9] 1 压缩最快压缩比最差,9压缩最慢压缩比最好
6. -l --list 显示压缩文件的详细信息,如 压缩后文件的大小,压缩前文件大小,压缩率,文件名等
7. -t --test 显示压缩文件的完整性
8. -k --keep 压缩或解压时保留原文件,该选项 gzip 不支持,bzip2 xz 支持
9. -f --fore 强制压缩或者解压文件,如覆盖文件等不提示
说明:压缩指令gzip bzip2 xz,解压缩 指令gunzip bunzip unxz, 其中xz压缩比最高,但是最费时间,其次是 bzip2,最后是gzip,但是gzip 用度最广,由于只是压缩算法和效率不一样,因此压缩指令的用法除了 -k 选项 gzip 不支持,解压缩指令不支持 -d 选项外,其他都是一样的,将指令换成其他的指令就就可以了,以下以 gzip 为例
1. 压缩一个或多个文件, 在linux中压缩和解压默认都是不保留原文件的
gzip -v test1 test2 # 默认以 6 压缩等级压缩,压缩后生成 test1.gz test2.gz文件,而 test1 test2 文件则不存在
gzip -v test1.gz test2.gz #解压缩test1.gz 文件,解压后生成 test1 test2,而 test1.gz test2.gz 文件将不存在
gunzip -v test1.gz test2.gz # 同上,解压缩
2. ,若要保留,则需要数据量重定向 >
gzip -cv test1 > test1.tar # 压缩保留源文件,该目录下游 test1 和 test1.tar 两个文件
gzip -dcv test1.tar > test1 # 解压缩保留源文件,test1文件不必存在,gzip会自动创建,若已经存在,将会覆盖该文件
gunzip -cv test1.tar > test1
3. 利用标准输出 -c 和 重定向 > 压缩或解压缩到指定目录
gzip -vc test2 > testdir/test2.gz #将test2 压缩到 testdir中的 test2.gz 文件
gzip -dvc test2.gz > /tmp/test2 #将test2 解缩到 tmp目录中的 test2 文件
gunzip -vc test2.gz > /tmp/test2
4. 以最大压缩比压缩
gzip -v9 test1 #将以9为压缩等级压缩,如果文件过大,耗时比较长
5. 递归压缩目录下的所有文件,目标文件以原文件末尾加上 .gz
gzip -rv mydir/ # mydir 目录下有文件 test1 test2 test3 三个文件,压缩后 mydir 目录将有 test1.gz test2.gz test3.gz
gzip -dv ./* # 解压当前目录下所有压缩文件
gunzip -v ./*
6. 检查压缩文件的完整性 及 列出压缩文件详细信息
[root@localhost testdir]# gzip -vt testa.gz
testa.gz: OK
[root@localhost mydir]# gzip -l test1.gz
compressed uncompressed ratio uncompressed_name
3953830 4121063 4.1% test1
[root@localhost mydir]# gunzip -l test1.gz
compressed uncompressed ratio uncompressed_name
3953830 4121063 4.1% test1 #没有错,gunzip 也支持列出详细信息
7. bzip2 xz 保留源文件压缩,当然 bzip2 xz 也可以用上面的 重定向数据流来压缩或解压文件
bzip -k testa #将testa 文件压缩成 testa.bz2,同时 testa 文件不删除
更多; zip 压缩指令 与 unzip 解压指令,为了兼容windows下面的压缩包,linux中也能用zip打包,即windows中的 *.zip 包也可以在linux中也能用 unzip 指令解压,同样 zip unzip也像window中那样是保留原文件的,zip/unzip 复杂的选项特别多,这里介绍常用的选项
zip-r:递归压缩目录下的文件和子目录
zip -r testdir.zip testdir/ # testdir 目录中有多个文件,将所有文件压缩到当前目录中的testdir.zip
-m:将文件压缩后添加压缩包,并删除原文件;
zip -m test1.zip test2 # 将test2 压缩后添加到 test1.zip 中,此时test1.zip 中含有 test1 test2 两个文件,但是当前目录中的test2 这个文件就删除没有了, -m 与 -g 选项的区别就是保留与不保留的区别
-u:将更新的文件添加到压缩包中
zip -u test.zip test4 # test.zip 中含有 test1 test4 这个两个文件,我将test4 这个文件修改后,更新test.zip 中的test4 内容,更新后,test4 这个文件保留
-P: 大写的p,加密压缩,为压缩包指定密码,即解压时需要输入密码
zip -P 123 test1.zip test1 # 加密压缩, 123 是密码,test1.zip 压缩后的文件,test1 被压缩的文件
-v:显示压缩过程
-[0-9]:执行压缩等级
-g:将文件压缩并添加到已有的压缩包,不新建压缩包,且不删除原文件
zip -g test.zip test3 # test.zip 含有 test1 test2文件,现在将test3 加入到 test.zip 中,test.zip 中将有 test1 test2 test3 这三个文件,且当前目录中的test3文件不会删除
unzip: 解压 .zip 的压缩包,同windows 下的解压风格,解压后保留原文件的
-v 显示执行过程的详细信息
-c 将解压的结果输出标准输出上,即屏幕
unzip -c test1.zip > test1 # 将test1.zip 解压到test1这个文件
-d 将文件解压到指定的目录
[root@localhost mydir]#unzip test1.zip -d /tmp/mydir/testdir/ #将test1.zip 解压到 /tmp/mydir/testdir 目录下,该目录下将含有 test1这个文件,同时 test1.zip 这个文件保留
Archive: test1.zip
-l 显示压缩包中的文件信息
[root@localhost mydir]# unzip -l test1.zip #显示 test1.zip 文件信息
Archive: test1.zip
Length Date Time Name
--------- ---------- ----- ----
4121063 11-09-2017 22:29 test1
--------- -------
4121063 1 file
- P 解压时指定密码,针对加密码的压缩包
[root@localhost mydir]#unzip test1.zip # 解压上面的加密压缩包
Archive: test1.zip
[test1.zip] test1 password: #输入密码 123
inflating: test1
[root@localhost mydir]#
-o 若用同名文件,不询问用户,直接覆盖掉
[root@localhost mydir]#unzip test1.zip #改目录下已经有test1这个文件,解压时将询问
Archive: test1.zip
replace test1? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
inflating: test1
[root@localhost mydir]# unzip -o test1.zip #强行覆盖,不做任何信息
Archive: test1.zip
inflating: test1
[root@localhost mydir]#
zcat/ bzcat/ xzcat zmore/ bzmore/ xzmore zless/ bzless/ xzless zgrep/ bzgrep/ xzgrep
这些指令就是不解压文件读取压缩文件的内容,
其中 zcat 读取 *.gz *.zip 压缩包文件的内容
bzcat读取 *.bz2 压缩包文件的内容
xzcat读取 *.xz 压缩包文件的内容
zmore 读取文件是结合more工具
zless 读取文件时结合 less工具
zgrep 不解压包搜索压缩文件的内容,支持正则表达式