Bash Shell压缩文件,你需要压缩几个文件,但又不确定最佳的压缩方法。
解决方案
首先,你得知道在传统 Unix 中,归档(或者称作合并)和文件压缩是两种操作,各自使用的工具也不同,而在 DOS 和 Windows 世界中,两者通常是一回事,一种工具就能完成。使用 tar(tape archive,磁带归档)命令合并多个文件或目录,然后再用 compress、gzip 或 bzip2 工具进行压缩,得到的就是“tarball”,其文件名称类似于 tarball.tar.Z
、tarball.tar.gz
、tarball.tgz
或 tarball.tar.bz2
。话虽如此,包括 zip 在内的很多其他工具也是支持的。
为了使用正确的格式,需要搞清楚数据将用于何处。如果纯粹只是压缩一些文件自用,怎么方便怎么来就行。如果其他人也要使用你的数据,那就要考虑对方所用的平台以及习惯。
Unix 的传统 tarball 是 tarball.tar.Z,但如今 gzip 用的更多,xz 和 bzip2(压缩率比 gzip 更好)也正在逐渐普及。但还有一个工具问题。有些版本的 tar 允许在创建归档的同时用指定的压缩工具自动压缩。有些版本则不行。
Unix 或 Linux 普遍接受的格式是 tarball.tar.gz,其创建方式如下所示:
$ tar cf tarball_name.tar directory_of_files
$ gzip tarball_name.tar
$
如果使用的是 GNU tar,那么 -Z 可用于压缩(该选项已经过时)、-z 用于指定 gzip(最稳妥)、-j 用于指定 bzip2(压缩率最高)。别忘了使用适合的文件名,tar 可不会帮你自动生成。例如:
tar czf tarball_name.tgz directory_of_files
虽然 tar 和 gzip 可用于很多平台,但如果涉及 Windows,最好还是使用 zip,因为它几乎是通用的。
zip -r zipfile_name directory_of_files
在 Unix 以及其他几乎所有平台上,zip 和 unzip 都是由 InfoZip 软件包提供的,但可能并未默认安装。与多数其他 Unix 工具不同,这些工具只执行命令本身的话,输出的是一些辅助的用法信息。另外注意,-l
选项可以将 Unix 行尾转换成 DOS 行尾,-ll
则执行相反操作。
讨论
这里要讨论的压缩算法和工具太多了,其中还包括 ar、arc、arj、bin、bz2、cab、jar、cpio、deb、hqx、lha、lzh、rar、rpm、uue、zoo。
使用 tar 时,我们强烈建议采用相对路径来保存所有文件。如果使用绝对路径,可能会误覆盖系统中的其他文件。不使用任何路径的话,提取出的文件会七零八散地出现在用户当前目录下。推荐用法是采用当前正在处理的数据名称和可能的版本号。下表展示了一些例子。
值得一提的是,Red Hat Package Manager(RPM,Red Hat 软件包管理器)文件其实就是带有头部信息的 CPIO 文件。你可以用名为 rpm2cpio 的 shell 或 Perl 脚本将头部剥离,提取其中的文件。
rpm2cpio some.rpm | cpio -i
Debian 的 .deb
文件其实就是 ar 归档,其中包含经过 gzip 或 bzip 压缩的 tar 归档。可以用标准工具 ar、gunzip 或 bunzip2 将其提取出来。
很多 Windows 工具(如 WinZip、PKZIP、FilZip、7-Zip)能处理这里提到的多数或全部格式,甚至包括 tarball 和 RPM。
酷客网相关文章:
评论前必须登录!
注册