博客背景
想要将一些文件和文件夹统一打包,却不知打包成哪种格式比较好!
认识常用压缩工具
tar
只进行归档,不压缩。例如有10个50k的文件,tar归档之后的大小是10 * 50kB = 500kB大小的tar包。
归档的唯一好处是减少小文件数量,减少小文件对磁盘空间的浪费。
举个例子:
例如磁盘是以FAT文件系统作为文件组织管理系统。假设文件簇大小为4KB,文件size要按照4KB对齐,最小的文件大小都需要4KB。
写入10个文件内容只有1个字符的文件,虽然每个文件内容只有1byte大小,但文件大小最少都要占用一个簇空间,即4KB。那么10个文件就占用10 * 4KB = 40KB。
而如果将10个文件归档成一个tar文件包,只需要一个4KB的簇空间就能装的下,以节省存储空间。
打包命令:tar -cvf xxx.tar [src] [dir] [...] 将src/dir ...等文件打包成xxx.tar
tar.gz
tar.gz是在tar打包的基础上,使用了gzip对tar文件进行压缩。又被简称为.tgz。
压缩命令:tar -czvf xxx.tar.gz [src] 将src文件压缩成xxx.tar.gz
参数说明:
参数z表示操作的类型是tar.gz; 参数c表示当前行为是打包;参数v是显示打包执行过程;参数f是指定打包后的文件名
解压命令:tar -xzvf xxx.tar.gz -C ~/ -C指定解压路径,将xxx.tar.gz解压到~/
参数说明:-x表示行为是解压;参数z表示对象是.tar.gz;参数v是显示解压过程;参数f是指定解压文件名;-C是指定解压到哪里
zip
格式开放且免费,几乎所有的压缩软件都支持该格式。由于出现时间比较早,今日的zip文件与其他压缩格式相比有众多无法忽视的缺点,原生不支持unicode文件名称,导致一部分文件共享困难。
从本地打包上传到服务器的压缩包,一般都是zip或者rar格式,而不是tar包格式。
zip包上传到服务器后,使用unzip命令解压,压缩成zip包使用zip命令
zip和unzip命令需要安装,使用yum直接安装:
yum install zip -y
yum install unzip -y
zip常用参数有 r,q,d
-r 压缩文件夹,递归执行,压缩文件夹下所有文件
-q 不显示压缩过程,默认会在控制台打印压缩文件过程
-d 压缩过程中剔除指定文件, -d参数后跟随的文件不打包到压缩包里
压缩文件夹且排除指定文件不压缩:
zip -r dirpath/ -d a.txt b.text
unzip常用参数有 n,v,d
-n 解压后不覆盖已存在文件,如果压缩包文件中与解压路径有同名文件,跳过该文件
-v 控制台打印显示压缩包内容,但是不解压,-v参数只进行查看
-d 指定解压后文件存放路径
unzip常直接使用,解压到当前路径,覆盖同名文件:
unzip file.zip
解压到指定路径,不覆盖已有同名文件:
unzip -n file.zip -d dirpath/
rar
RAR比ZIP压缩比率高,但压缩/解压速度慢。
7z
是Zip格式的升级,压缩率非常高,但要收费。
压缩格式对比
压缩率
压缩率:7z > RAR > Zip ≈ tar.gz
普遍性
a. zip的应用是最广泛的,win和mac系统在不安装第三方app的情况下也可以打开zip文件,是其它压缩格式不具备的优势。
b. rar虽然压缩率很高,但收费。
c. 7z文件格式也不一定免费。
d.tar.gz跟zip相差不大,在linux中应用广泛,不过在其它系统中需要安装相应工具。
常见压缩工具
Linux系统的tar命令用于tar/tar.gz格式的压缩和解压缩
gzip命令用于.gz格式的压缩和解压缩;
zip命令用于zip包的压缩,unzip命令用于.zip格式的解压缩;