# 文件压缩解压
# Flag
rar tar zip 7z 是归档容器,里面可以放多个文件、有目录结构,其中 tar本身不带压缩
rar 带单独的压缩算法(据说类 Deflate),加密算法(AES),有相对完善的压缩过滤器
zip 压缩算法Deflate,因为历史问题被迫成为多算法的加密容器(互不兼容的 AES),压缩比相对不太高, 不识别文件名的编码,有特殊的带过滤格式 zipx。gz是zip算法的一个GNU实现。
7-zip 压缩算法 LZMA、LZMA2、ppmd、bzip2,加密算法(AES),有初步的过滤能力
tar 可以和压缩或加密格式串用,tar.gz tar.bzip2 tar.xz tar.lzma 都是常见的压缩格式组合压缩算法方面, 对常规文件现在 7z 自带的 lzma2 是最佳选择,对多媒体文件,可考虑 rar 和 zipx
xz的默认压缩级别是6。7z的默认压缩级别是5,至少在字典大小上相当于xz的压缩级别7,另外7z默认开了多线程,有多核可用的时候表现会好些
xz和7z的默认参数压缩算法都是lzma2(tar能解压7z,7-zip也能解压xz),这个算法出自7-zip作者
Igor Pavlov
。
- https://sourceforge.net/projects/getgnuwin32 (opens new window)
- https://sourceforge.net/projects/gnuwin32 (opens new window)
- https://github.com/google/zopfli (opens new window)
- https://www.win-rar.com (opens new window)
- https://github.com/bitcookies/winrar-keygen (opens new window)
- https://github.com/onekey-sec/unblob (opens new window)
- https://github.com/inikep/lzbench (opens new window)
- https://www.gzip.org (opens new window)
- http://compression.great-site.net (opens new window)
- https://github.com/wummel/patool (opens new window)
- https://sourceforge.net/projects/littleutils (opens new window)
# tar
tar
是在Linux
中使用得非常广泛的文档打包格式(保留 unix 风格的文件权限)。它只消耗非常少的CPU以及时间去打包文件, 但它仅仅只是一个打包工具,并不负责压缩。
实际使用中,除了要打包之外,往往还需要其他的压缩命令一起出现进行一下压缩,提高空间利用率。
参数
命令类型参数:
-c
或–create
:建立新的备份文件。-x
或–extract
或–get
:从备份文件中还原文件。
压缩方式参数:
-j
或–bzip2
:以bz2的算法来压缩或者解压文件。-z
或–gzip
或–ungzip
:通过 gzip 指令处理备份文件。
其他常用参数:
-v
或–verbose
:显示指令执行过程。-C <目的目录>
或–directory=<目的目录>
:切换到指定的目录。
压缩
# 将目标打包成一个*.tar格式的文件
tar -cvf 名称.tar 目录或文件
# 将目标打包成一个*.tgz格式的文件
tar -czvf 名称.tgz 目录或文件
# 将目标打包并压缩成一个*.tar.gz格式的文件
tar -czvf 名称.tar.gz 目录或文件
# 将目标打包并压缩成一个*.tar.bz2格式的文件
tar -cjvf 名称.tar.bz2 目录或文件
# 将打包好的tar文件压缩成一个*.tar.xz格式的文件
xz -z 名称.tar.xz
# 或者一条命令执行
tar -Jcvf 文件名.tar.xz 目录或文件
# 将目标打包并压缩成一个*.tar.7z格式的文件
tar cvf - 目录或文件 | 7z a -si 文件名.tar.7z
注意:在使用
tar
的--exclude
命令排除打包时,末尾不能加/
或者路径为绝对路径,否则还是会把排除目录以及其下的文件打包进去。
# 打包的时候我们要排除 tomcat/logs 目录,命令如下:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat
# 如果要排除多个目录,增加 --exclude 即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat
解压
参数
-C
解压到指定目录下
# 解压一个*.tar的文件包内容到当前目录下
tar -xvf pakage_name.tar
# 解压一个*.tgz的文件包内容到当前目录下
tar -xzvf pakage_name.tgz
# 解压一个*.tar.gz的压缩包内容到当前目录下
tar -xzvf pakage_name.tar.gz
# 解压一个*.tar.bz2的压缩包内容到当前目录下
tar -xjvf pakage_name.tar.bz2
# tar.xz压缩包需要先解压为tar格式包
xz -d pakage_name.tar.xz
# 再解开tar格式包到当前目录下
tar -xvf pakage_name.tar
# 或者一条命令执行
tar -Jxvf 文件名.tar.xz
# 7zip
- https://github.com/ip7z/7zip (opens new window)
- https://sourceforge.net/projects/sevenzip (opens new window)
- https://www.7-zip.org/download.html (opens new window)
- 打开7zip -> 点击菜单栏上的
工具
->选项
-> 点击两个+
号关联所有默认解压方式到当前账户和所有账户
- https://microsoft.github.io/VirtualClient/docs/workloads/compression/7zip (opens new window)
- https://github.com/M2Team/NanaZip (opens new window)
- https://github.com/peazip/PeaZip (opens new window)
- https://github.com/nmoinvaz/minizip (opens new window)
- https://www.breezip.com (opens new window)
注意:所有的参数和值之间是没有空格的
参数
a
添加文件或文件夹到压缩包。b
基准d
从存档中删除文件e
从存档中提取文件(不使用目录名)h
计算文件的哈希值i
显示有关受支持格式的信息l
列出档案内容rn
重命名存档中的文件t
测试档案的完整性u
更新文件以存档x
解压文件,保留原来的目录结构
-t
指定压缩类型,默认7z。-r
表示递归所有的子文件夹。-mmt[N]
设置CPU线程数-mx=值
设置压缩级别:-mx1
(最快),-mx9
(最慢,压缩比最高),默认为5。-ao
设置覆盖模式,a
全部覆盖-o
指定解压到的目录
# CentOS安装7zip
yum –y install p7zip
# 解压到当前目录下,不保留原来的目录结构
7za e 文件名
# 解压到当前目录下,但保留原来的目录结构
7za x 文件名
# 用7z压缩成tar
7za a -ttar 文件名.tar 文件夹
# 用7z把tar压缩成gz
7za a -tgzip 文件名.tar.gz 文件名.tar
# Deflate
在1990年左右,Info-ZIP组编写了可移植的,免费开源的实用程序zip和unzip实用程序,使用Deflate进行压缩以及对zip和早期格式进行解压缩
在90年代初期,gzip格式被开发为Unix compress实用程序的替代,它是从Info-ZIP实用程序中的Deflate代码衍生而来
zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并能检测解压出来的数据的完整性(integrity)。zlib是从gzip代码改编而来
# zip
zip
是压缩程序
参数
A
调整可执行的自动解压缩文件。d
从压缩文件内删除指定的文件。D
压缩文件内不建立目录名称。F
尝试修复已损坏的压缩文件。g
将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。j
只保存文件名称及其内容,而不存放任何目录名称。m
将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。o
以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。q
不显示指令执行过程。r
递归处理,将指定目录下的所有文件和子目录一并处理。S
包含系统和隐藏文件。v
显示指令执行过程或显示版本信息。- <压缩效率> 压缩效率是一个介于 1-9 的数值。
zip 文件名.zip 文件或目录
# unzip
unzip是解压程序。
参数
f
更新现有的文件。l
显示压缩文件内所包含的文件。v
执行是时显示详细的信息。C
压缩文件中的文件名称区分大小写。j
不处理压缩文件中原有的目录路径。L
将压缩文件中的全部文件名改为小写。n
解压缩时不要覆盖原有的文件。o
不必先询问用户,unzip 执行后覆盖原有文件。P<密码>
使用 zip 的密码选项。q
执行时不显示任何信息。[.zip 文件]
指定.zip 压缩文件。[文件]
指定要处理.zip 压缩文件中的哪些文件。d<目录>
指定文件解压缩后所要存储的目录。x<文件>
指定不要处理.zip 压缩文件中的哪些文件。
unzip 文件名.zip