在 Linux 上压缩文件的 4种方法
发布时间:2020-5-13 15:50
发布者:嵌入式人生17
在 Linux 上压缩文件的 4种方法 作者:Sandra Henry-Stocker tar tar 命令不是专门的压缩命令。它通常用于将多个文件拉入一个单个的文件中,以便容易地传输到另一个系统,或者将文件作为一个相关的组进行备份。它也提供压缩的功能,这就很有意义了,附加一个 z 压缩选项能够实现压缩文件。 当使用 z 选项为 tar 命令附加压缩过程时,tar 使用 gzip 来进行压缩。 就像压缩一组文件一样,你可以使用 tar 来压缩单个文件,尽管这种操作与直接使用 gzip 相比没有特别的优势。要使用 tar 这样做,只需要使用 tar cfz newtarfile filename 命令来标识要压缩的文件,就像标识一组文件一样,像这样: 1. $ tar cfz bigfile.tgz bigfile 2. ^ ^ 3. | | 4. +- 新的文件 +- 将被压缩的文件 5. 6. $ ls -l bigfile* 7. -rw-rw-r-- 1 shs shs 103270400 Apr 16 16:09 bigfile 8. -rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz 注意,文件的大小显著减少了。 如果你愿意,你可以使用 tar.gz 扩展名,这可能会使文件的特征更加明显,但是大多数的 Linux 用户将很可能会意识到与 tgz 的意思是一样的 – tar 和 gz 的组合来显示文件是一个压缩的 tar 文件。在压缩完成后,你将同时得到原始文件和压缩文件。 要将很多文件收集在一起并在一个命令中压缩出 “tar ball”,使用相同的语法,但要指定要包含的文件为一组,而不是单个文件。这里有一个示例: 1. $ tar cfz bin.tgz bin/* 2. ^ ^ 3. | +-- 将被包含的文件 4. + 新的文件 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps28.png zip zip 命令创建一个压缩文件,与此同时保留原始文件的完整性。语法像使用 tar 一样简单,只是你必需记住,你的原始文件名称应该是命令行上的最后一个参数。 1. $ zip ./bigfile.zip bigfile 2. updating: bigfile (deflated 79%) 3. $ ls -l bigfile bigfile.zip 4. -rw-rw-r-- 1 shs shs 103270400 Apr 16 11:18 bigfile 5. -rw-rw-r-- 1 shs shs 21606889 Apr 16 11:19 bigfile.zip file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps29.png gzip gzip 命令非常容易使用。你只需要键入 gzip,紧随其后的是你想要压缩的文件名称。不像上述描述的命令,gzip 将“就地”加密文件。换句话说,原始文件将被加密文件替换。 1. $ gzip bigfile 2. $ ls -l bigfile* 3. -rw-rw-r-- 1 shs shs 21606751 Apr 15 17:57 bigfile.gz file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps30.png bzip2 像使用 gzip 命令一样,bzip2 将在你选择的文件“就地”压缩,不留下原始文件。 1. $ bzip bigfile 2. $ ls -l bigfile* 3. -rw-rw-r-- 1 shs shs 18115234 Apr 15 17:57 bigfile.bz2 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps31.png 对比 大多数人都听说过“大小不是一切”。所以,让我们比较一下文件大小以及一些当你计划如何压缩文件时的问题。 下面显示的统计数据都与压缩单个文件相关,在上面显示的示例中使用 bigfile。这个文件是一个大的且相当随机的文本文件。压缩率在一定程度上取决于文件的内容。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps33.png 大小减缩率 当比较时,上面显示的各种压缩命产生下面的结果。百分比表示压缩文件与原始文件的比较效果。 1. -rw-rw-r-- 1 shs shs 103270400 Apr 16 14:01 bigfile 2. ------------------------------------------------------ 3. -rw-rw-r-- 1 shs shs 18115234 Apr 16 13:59 bigfile.bz2 ~17% 4. -rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz ~21% 5. -rw-rw-r-- 1 shs shs 21608322 Apr 16 13:59 bigfile.tgz ~21% 6. -rw-rw-r-- 1 shs shs 13427236 Apr 16 14:00 bigfile.xz ~13% 7. -rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip ~21% xz 命令获胜,最终只有压缩文件 13% 的大小,但是所有这些压缩命令都相当显著地减少原始文件的大小。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps34.png 是否替换原始文件 bzip2、gzip 和 xz 命令都用压缩文件替换原始文件。tar 和 zip 命令不替换。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps35.png 运行时间 xz 命令似乎比其它命令需要花费更多的时间来加密文件。对于 bigfile 来说,大概的时间是: 1. 命令 运行时间 2. tar 4.9 秒 3. zip 5.2 秒 4. bzip2 22.8 秒 5. gzip 4.8 秒 6. xz 50.4 秒 解压缩文件很可能比压缩时间要短得多。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps36.png 文件权限 不管你对压缩文件设置什么权限,压缩文件的权限将基于你的 umask 设置,但 bzip2 除外,它保留了原始文件的权限。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps37.png 与 Windows 的兼容性 zip 命令创建的文件可以在 Windows 系统以及 Linux 和其他 Unix 系统上使用(即解压),而无需安装其他工具,无论这些工具可能是可用还是不可用的。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps38.png 解压缩文件 解压文件的命令与压缩文件的命令类似。在我们运行上述压缩命令后,这些命令用于解压缩 bigfile: ◈ tar: tar xf bigfile.tgz◈ zip: unzip bigfile.zip◈ gzip: gunzip bigfile.gz◈ bzip2: bunzip2 bigfile.gz2◈ xz: xz -d bigfile.xz 或 unxz bigfile.xzfile:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps39.png 自己运行压缩对比 如果你想自己运行一些测试,抓取一个大的且可以替换的文件,并使用上面显示的每个命令来压缩它 —— 最好使用一个新的子目录。你可能需要先安装 xz,如果你想在测试中包含它的话。这个脚本可能更容易地进行压缩,但是可能需要花费几分钟完成。 1. #!/bin/bash 2. 3. # 询问用户文件名称 4. echo -n "filename> " 5. read filename 6. 7. # 你需要这个,因为一些命令将替换原始文件 8. cp $filename $filename-2 9. 10. # 先清理(以免先前的结果仍然可用) 11. rm $filename.* 12. 13. tar cvfz ./$filename.tgz $filename > /dev/null 14. zip $filename.zip $filename > /dev/null 15. bzip2 $filename 16. # 恢复原始文件 17. cp $filename-2 $filename 18. gzip $filename 19. # 恢复原始文件 20. cp $filename-2 $filename 21. xz $filename 22. 23. # 显示结果 24. ls -l $filename.* 25. 26. # 替换原始文件 27. mv $filename-2 $filename |
网友评论