COMPRESS(1)

名称
compress, uncompress - データを圧縮、伸長する

書式
compress [-cfv] [-b bits] [file ...] uncompress [-cfv] [file ...]

解説
compress は、適応型 Lempel-Ziv 法を用いて、ファイルを圧縮します。 各 file は、圧縮されて、元のファイル名に拡張子 “.Z” を付加したものにリネームされます。そして、ファイルの更新時刻、 アクセス時間、ファイルフラグ、ユーザ ID、グループ ID の大半は、 パーミッションの許す範囲で圧縮ファイルに引き継がれます。 もし圧縮しても file のサイズが小さくならない場合、そのファイルは無視されます。

uncompress は compress されたファイルを元通りのファイルにリストアし、 ファイル名を “.Z” 拡張子のないものにリネームします。

ファイルの名前変更をするとファイルの上書きが起こってしまうような場合で、 標準入力が端末の場合は、確認を求めるプロンプトが (標準エラー出力に) 出力されます。 プロンプトが出せなかったり、確認の回答が得られなかった場合には、 ファイルは上書きされません。

ファイル名が指定されなかった場合は、標準入力からのデータが圧縮もしくは 伸長され、標準出力に結果のデータが出力されます。 もし入力および出力ファイルが通常ファイルでない場合、 圧縮ファイルのサイズのチェックとファイルの上書きチェックは機能しません。 入力ファイルは削除されず、また入力ファイルの属性は引き継がれません。

オプションは以下のものがあります:

-b  ビットコードの上限値を bits にします (下記参照)。

-c  圧縮もしくは伸長データの出力先を、標準出力とします。入力元のファイルは 変更されません。

-f  ファイル長が小さくなるならないにかかわらず、 file の圧縮を強行します。 また、圧縮ファイルと同名のファイルがすでに存在する場合でも、 確認を求めることなく強制的にファイルの上書きを行います。

-v  圧縮前後のファイルサイズを比較して何 % になったかを表示します。

compress では、Lempel-Ziv アルゴリズムを改造したものを使用しています。 ファイル中に共通して出現する部分文字列を、まず 257 以上の 9 ビットコードに 置き換えます。このコードが 512 まで使用されてしまったら、10 ビットコードを 使用するようにアルゴリズムを切り替えます。 同様にコードビット幅が足りなくなる度に、 -b フラグで指定された上限 (デフォルトは 16) まで増やしていきます。 この上限 bits は、9 から 16 の間でなければなりません。

コードビット幅が bits まで達してしまった場合、 compress は定期的に圧縮率をチェックします。もし圧縮率が上昇していれば、 compress は現状のコード辞書を使い続けます。しかし、圧縮率が下がった場合には、 compress はコード辞書を破棄し、辞書を一から作り直します。 このようにして、ファイルの次の "block" に対しアルゴリズムを適応させていく ことができます。

-b フラグは uncompress にはありません。 これは、圧縮時に指定された bits パラメータが、マジックナンバーと共に圧縮データにエンコードされているからです。 このマジックナンバーは、ランダムデータの圧縮や、既に圧縮されたデータの 再圧縮などを防止するために用いられています。

圧縮率は、入力のサイズ、コードビット幅 bits 、共通部分文字列の分布に依存します。 一般的に、ソースコードや英語のようなテキストの場合には、50-60% に圧縮 されます。 この圧縮法は一般に、Huffman コーディング (pack コマンドで使われている) や 適応型 Huffman コーディング (compact コマンドで使われている) よりも圧縮率が大変高く、また計算時間も短かくてすみます。

compress ユーティリティは、正常終了時には 0 を、エラーが起こった場合には 0 より 大きな値を返します。

関連項目
zcat(1) Welch, Terry A., June, 1984, A Technique for High Performance Data Compression, IEEE Computer, 17:6, pp. 8-19.

歴史
compress コマンドは 4.3BSD から登場しました。