「compress(1)」-

压缩和扩展数据

命令语法格式

compress [ -f ] [ -v ] [ -c ] [ -V ] [ -r ] [ -b bits ] [ name … ]

uncompress.real [ -f ] [ -v ] [ -c ] [ -V ] [ name … ]

命令描述

请注意,在Debian中,通常作为uncompress安装的程序将作为uncompress.real安装。这样做是为了避免与更常用的程序冲突,该程序具有与gzip包相同的名称。

compress

命令compress使用自适应Lempel-Ziv编码减小命名文件的大小。只要有可能,每个文件都被扩展名为.Z的文件替换,同时保持相同的所有权模式、访问、修改时间。如果未指定文件,则标准输入将压缩为标准输出。命令compress只会尝试压缩常规文件。特别是,它将忽略符号链接。如果文件有多个硬链接,则除非给出-f标志,否则compress将拒绝压缩它。

如果未给出-f选项,并且在前台运行compress,则会提示用户是否应覆盖现有文件。

uncompress

可以使用uncompress.real将压缩文件恢复为原始格式。

uncompress.real在其命令行中获取文件列表,并替换名称以.Z结尾的每个文件,并以没有.Z的未压缩文件的正确幻数开头。未压缩的文件将具有压缩文件的模式、所有权、时间戳。

-c选项使compress/uncompress.real写入标准输出;没有文件被更改。

如果指定了-r标志,则compress将以递归方式运行。如果命令行中指定的任何文件名是目录,则compress将下降到目录中并压缩它在那里找到的所有文件。

在执行任何压缩或解压缩之前,-V标志告诉每个程序在标准错误上打印其版本和补丁级别以及编译期间指定的任何预处理程序标志。

Compress使用在“高性能数据压缩技术”中推广的改进的Lempel-Ziv算法,Terry A. Welch,IEEE Computer,vol。17,no. 6(1984年6月),第8-19页。文件中的公共子串首先被9位代码257及更换取代。当到达代码512时,算法切换到10位代码并继续使用更多位,直到达到-b标志指定的限制为止(默认16)。位必须介于9和16之间。可以在源中更改默认值以允许运行在一台较小的机器上运行压缩。

达到位限制后,compress会定期检查压缩比。如果它在增加,压缩将继续使用现有的代码字典。但是,如果压缩率降低,则compress会丢弃子字符串表,并从头开始重建。这允许算法适应文件的下一个“块”。

请注意,uncompress.real省略-b标志,因为压缩期间指定的bits参数在输出中编码,并带有幻数,以确保既不尝试解压缩随机数据,也不尝试重压缩压缩数据。

获得的压缩量取决于输入的大小、每个代码的位数、公共子串的分布。通常,源代码或英语等文本减少50-60%。压缩通常比通过霍夫曼编码(如在包中使用)或自适应霍夫曼编码(紧凑)所实现的压缩要好得多,并且花费更少的时间来计算。

在-v选项下,将打印一条消息,产生压缩的每个文件的减少百分比。

问题诊断

Usage: compress [-dfvcVr] [-b maxbits] [file …]
在命令行上指定了无效的选项。

Missing maxbits
最大值必须遵循-b选项。

file: not in compressed format
指定为解压缩的文件尚未压缩。

file: compressed with xx bits, can only handle yy bits
文件是由一个程序进行压缩的,该程序可以处理比本机上的压缩代码更多的位。用较小的位重新压缩文件。

file: already has .Z suffix — no change
假定该文件已被压缩。重命名该文件,然后重试。

file: filename too long to tack on .Z
无法压缩文件,因为其名称长度超过12个字符。重命名并重试。此消息不会在BSD系统上发生。

file already exists; do you wish to overwrite (y or n)?
如果要替换输出文件,则回答“y”;如果不是,“n”。

uncompress: corrupt input
检测到SIGSEGV违规,这通常意味着输入文件已损坏。

Compression: xx.xx%
压缩保存的输入百分比。(仅与-v相关)

— not a regular file or directory: ignored
当输入文件不是常规文件或目录(例如符号链接,套接字,FIFO,设备文件)时,它保持不变。

— has xx other links: unchanged
输入文件有链接;它保持不变。有关更多信息,请参阅ln(1)。使用-f标志强制压缩多重链接文件。

— file unchanged
压缩不会节省成本。输入仍然是原样。

注意事项

虽然压缩文件在具有大内存的机器之间是兼容的,但是-b12应该用于文件传输到具有小的进程数据空间(64KB或更少,如DEC PDP系列,Intel 80286等所展示的)的架构。

使用-r标志调用compress有时会导致它产生如下形式的虚假错误警告:

“<filename>.Z already has .Z suffix – ignored”

这些警告可以忽略。有关说明,请参阅源代码分发中compress42.c:compdir()中的注释。

退出状态

0 退出状态通常为0

1 如果发生错误

2 如果(尝试)压缩后最后一个文件较大

相关手册

pack(1), compact(1)

参考文献

  • man 1 compress, Version 4.2.4.4-21

更新日志

  • 09/18/2018 创建文章