Bash Shell压缩文件

Bash Shell压缩文件,你需要压缩几个文件,但又不确定最佳的压缩方法。

解决方案

首先,你得知道在传统 Unix 中,归档(或者称作合并)和文件压缩是两种操作,各自使用的工具也不同,而在 DOS 和 Windows 世界中,两者通常是一回事,一种工具就能完成。使用 tar(tape archive,磁带归档)命令合并多个文件或目录,然后再用 compress、gzip 或 bzip2 工具进行压缩,得到的就是“tarball”,其文件名称类似于 tarball.tar.Ztarball.tar.gztarball.tgztarball.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 时,我们强烈建议采用相对路径来保存所有文件。如果使用绝对路径,可能会误覆盖系统中的其他文件。不使用任何路径的话,提取出的文件会七零八散地出现在用户当前目录下。推荐用法是采用当前正在处理的数据名称和可能的版本号。下表展示了一些例子。

Bash Shell压缩文件

值得一提的是,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。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!