在 Linux 系统上有很多可以用于压缩文件的工具,但它们的表现并不都是一样的,也不是所有的压缩效果都是一样的。在这篇文章中,我们比较其中的五个工具。
来源:https://linux.cn/article-12190-1.html作者:Sandra Henry-stocker译者:郑在 Linux 上有不少用于压缩文件的命令。最新最有效的一个方法是 xz,但是所有的方法都有节省磁盘空间和维护备份文件供以后使用的优点。在这篇文章中,我们将比较这些压缩命令并指出显著的不同。
tartar 命令不是专门的压缩命令。它通常用于将多个文件拉入一个单个的文件中,以便容易地传输到另一个系统,或者将文件作为一个相关的组进行备份。它也提供压缩的功能,这就很有意义了,附加一个 z 压缩选项能够实现压缩文件。
当使用 z 选项为 tar 命令附加压缩过程时,tar 使用 gzip 来进行压缩。
就像压缩一组文件一样,你可以使用 tar 来压缩单个文件,尽管这种操作与直接使用 gzip 相比没有特别的优势。要使用 tar 这样做,只需要使用 tar cfz newtarfile filename 命令来标识要压缩的文件,就像标识一组文件一样,像这样:
$ tar cfz bigfile.tgz bigfile ^ ^ | | - 新的文件 - 将被压缩的文件$ ls -l bigfile*-rw-rw-r-- 1 shs shs 103270400 Apr 16 16:09 bigfile-rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz注意,文件的大小显著减少了。
如果你愿意,你可以使用 tar.gz 扩展名,这可能会使文件的特征更加明显,但是大多数的 Linux 用户将很可能会意识到与 tgz 的意思是一样的 – tar 和 gz 的组合来显示文件是一个压缩的 tar 文件。在压缩完成后,你将同时得到原始文件和压缩文件。
要将很多文件收集在一起并在一个命令中压缩出 “tar ball”,使用相同的语法,但要指定要包含的文件为一组,而不是单个文件。这里有一个示例:
$ tar cfz bin.tgz bin/* ^ ^ | -- 将被包含的文件 新的文件zipzip 命令创建一个压缩文件,与此同时保留原始文件的完整性。语法像使用 tar 一样简单,只是你必需记住,你的原始文件名称应该是命令行上的最后一个参数。
$ zip ./bigfile.zip bigfileupdating: bigfile (deflated 79%)$ ls -l bigfile bigfile.zip-rw-rw-r-- 1 shs shs 103270400 Apr 16 11:18 bigfile-rw-rw-r-- 1 shs shs 21606889 Apr 16 11:19 bigfile.zipgzipgzip 命令非常容易使用。你只需要键入 gzip,紧随其后的是你想要压缩的文件名称。不像上述描述的命令,gzip 将“就地”“加密”文件。换句话说,原始文件将被“加密”文件替换。
$ gzip bigfile$ ls -l bigfile*-rw-rw-r-- 1 shs shs 21606751 Apr 15 17:57 bigfile.gzbzip2像使用 gzip 命令一样,bzip2 将在你选择的文件“就地”压缩,不留下原始文件。
$ bzip bigfile$ ls -l bigfile*-rw-rw-r-- 1 shs shs 18115234 Apr 15 17:57 bigfile.bz2xzxz 是压缩命令团队中的一个相对较新的成员,在压缩文件的能力方面,它是一个领跑者。像先前的两个命令一样,你只需要将文件名称提供给命令。再强调一次,原始文件被就地压缩。
$ xz bigfile$ ls -l bigfile*-rw-rw-r-- 1 shs shs 13427236 Apr 15 17:30 bigfile.xz对于大文件来说,你可能会注意到 xz 将比其它的压缩命令花费更多的运行时间,但是压缩的结果却是非常令人赞叹的。
对比大多数人都听说过“大小不是一切”。所以,让我们比较一下文件大小以及一些当你计划如何压缩文件时的问题。
下面显示的统计数据都与压缩单个文件相关,在上面显示的示例中使用 bigfile。这个文件是一个大的且相当随机的文本文件。压缩率在一定程度上取决于文件的内容。
大小减缩率
当比较时,上面显示的各种压缩命产生下面的结果。百分比表示压缩文件与原始文件的比较效果。
-rw-rw-r-- 1 shs shs 103270400 Apr 16 14:01 bigfile-------------------------------------------------------rw-rw-r-- 1 shs shs 18115234 Apr 16 13:59 bigfile.bz2 ~17%-rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz ~21%-rw-rw-r-- 1 shs shs 21608322 Apr 16 13:59 bigfile.tgz ~21%-rw-rw-r-- 1 shs shs 13427236 Apr 16 14:00 bigfile.xz ~13%-rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip ~21%xz 命令获胜,最终只有压缩文件 13% 的大小,但是所有这些压缩命令都相当显著地减少原始文件的大小。
是否替换原始文件
bzip2、gzip 和 xz 命令都用压缩文件替换原始文件。tar 和 zip 命令不替换。
运行时间
xz 命令似乎比其它命令需要花费更多的时间来“加密”文件。对于 bigfile 来说,大概的时间是:
命令 运行时间tar 4.9 秒zip 5.2 秒bzip2 22.8 秒gzip 4.8 秒xz 50.4 秒解压缩文件很可能比压缩时间要短得多。
文件权限
不管你对压缩文件设置什么权限,压缩文件的权限将基于你的 umask 设置,但 bzip2 除外,它保留了原始文件的权限。
与 Windows 的兼容性
zip 命令创建的文件可以在 Windows 系统以及 Linux 和其他 Unix 系统上使用(即解压),而无需安装其他工具,无论这些工具可能是可用还是不可用的。
解压缩文件解压文件的命令与压缩文件的命令类似。在我们运行上述压缩命令后,这些命令用于解压缩 bigfile:
tar: tar xf bigfile.tgzzip: unzip bigfile.zipgzip: gunzip bigfile.gzbzip2: bunzip2 bigfile.gz2xz: xz -d bigfile.xz 或 unxz bigfile.xz自己运行压缩对比如果你想自己运行一些测试,抓取一个大的且可以替换的文件,并使用上面显示的每个命令来压缩它 —— 最好使用一个新的子目录。你可能需要先安装 xz,如果你想在测试中包含它的话。这个脚本可能更容易地进行压缩,但是可能需要花费几分钟完成。
#!/bin/bash# 询问用户文件名称echo -n "filename> "read filename# 你需要这个,因为一些命令将替换原始文件cp $filename $filename-2# 先清理(以免先前的结果仍然可用)rm $filename.*tar cvfz ./$filename.tgz $filename > /dev/nullzip $filename.zip $filename > /dev/nullbzip2 $filename# 恢复原始文件cp $filename-2 $filenamegzip $filename# 恢复原始文件cp $filename-2 $filenamexz $filename# 显示结果ls -l $filename.*# 替换原始文件mv $filename-2 $filenamevia: https://www.networkworld.com/article/3538471/how-to-compress-files-on-linux-5-ways.html
作者: Sandra Henry-Stocker 选题: lujun9972 译者: robsean 校对: wxy
本文由 LCTT 原创编译, Linux中国 荣誉推出
点击“了解更多”可访问文内链接linux下数据压缩的几种方法与查看方式
1. tar命令使用tar程序打出来的包我们常称为tar包. tar包文件的命令通常都是以.tar结尾的。生成tar包后. 就可以用其它的程序来进行压缩了. tar命令本身不进行数据压缩. 但可以在打包或解包的同时调用其它的压缩程序. 比如调用gzip、bzip2
选项:
-c 创建.tar格式包文件
-x 解开.tar格式包文件
-v显示详细信息
-f 使用归档文件
-p 保留原始文件权限
-C 解压到目标文件夹
-z 调用gzip进行压缩或解压
-j 调用bzip2进行压缩或解压
打包示例:
tar -cvf /blog/uouo123/com.tar bb.txt 打包文件
打包并压缩示例:
tar -zcvf /blog/uouo123/com.tar.gz bb.txt 压缩文件
解压缩示例:
tar -zxvf /blog/uouo123/com.tar.gz -C /com/bb 解压文件
2. gzip压缩
常用数据压缩命令. 压缩比例可手工调整. 压缩后文件名 filename.gz:
注:压缩后文件可直接load至hive数据库. 但每个文件只会产生一个map. 查询效率极低
选项:
-c 将输出写到标准输出上. 并保留原有文件。
-d 将压缩文件解压。
-l 对每个压缩文件. 显示下列字段:
压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名字
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 测试. 检查压缩文件是否完整。
-v 对每一个压缩和解压的文件. 显示文件名和压缩比。
-num 用指定的数字 num 调整压缩的速度. -1 或 --fast 表示最快压缩方法(低压缩比).
-9 或--best表示最慢压缩方法(高压缩比)。系统缺省值为 6。
压缩示例:
gzip filename
查看gzip压缩文件内容命令:
zcat filename.gz
解压缩命令:
gzip -d filename.gz
压缩过程中可控制压缩率(1-9). 1压缩最快. 压缩率不高. 9压缩最慢. 压缩比例最高. 缺省为6. 例如:
gzip -9 filename
3. bzip2压缩
常用数据压缩命令. 压缩比例比gzip高. 压缩后文件名为filename.bz2
注:压缩后文件可直接load至hive数据库
选项
-c或——stdout:将压缩与解压缩的结果送到标准输出;
-d或——decompress:执行解压缩;
-f或-force:bzip2在压缩或解压缩时. 若输出文件与现有文件同名. 预设不会覆盖现有文件。若要覆盖。请使用此参数;
-h或——help:在线帮助;
-k或——keep:bzip2在压缩或解压缩后. 会删除原始文件。若要保留原始文件. 请使用此参数;
-s或——small:降低程序执行时内存的使用量;
-t或——test:测试.bz2压缩文件的完整性;
-v或——verbose:压缩或解压缩文件时. 显示详细的信息;
-z或——compress:强制执行压缩;
-V或——version:显示版本信息;
--repetitive-best:若文件中有重复出现的资料时. 可利用此参数提高压缩效果;
--repetitive-fast:若文件中有重复出现的资料时. 可利用此参数加快执行效果。
压缩示例:
bzip2 filename
解压缩示例:
bzip2 -d filename.bz2
直接查看压缩文件示例:
bzcat filename.bz2
使用默认压缩情况下压缩性能:
bzip2 > gzip > tar
linux中怎么压缩一个文件夹
1、将/home/wwwroot/xahot/ 这个目录下所有文件和文件夹打包为当前目录下的xahot.zip
zip –q –r xahot.zip /home/wwwroot/xahot
2、上面的命令操作是将绝对地址的文件及文件夹进行压缩。以下给出压缩相对路径目录,比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果。
zip –q –r xahot.zip xahot
3、比如现在我的xahot目录下,我操作的zip压缩命令是
zip –q –r xahot.zip *
4、然后就完成了。