コマンドラインのマニュアル

Man » xz マニュアルオンライン - xz man ページの詳細なオンラインドキュメント

🌍
xz、unxz、xzcat、lzma、unlzma、lzcat - .xz および .lzma ファイルを圧縮または解凍します。

構文

xz [オプション...] [ファイル...]

コマンドエイリアス

unxz は xz --decompress と同等です。
xzcat は xz --decompress --stdout と同等です。
lzma は xz --format=lzma と同等です。
unlzma は xz --format=lzma --decompress と同等です。
lzcat は xz --format=lzma --decompress --stdout と同等です。

スクリプトでファイルを解凍する必要がある場合は、常に unxz や xzcat ではなく、xz を適切な引数 (xz -d または xz -dc) を付けて使用することをお勧めします。

説明

xz は、gzip(1) および bzip2(1) に似たコマンドライン構文を持つ、汎用データ圧縮ツールです。ネイティブファイル形式は .xz 形式ですが、LZMA Utils で使用されるレガシー .lzma 形式と、コンテナ形式ヘッダーを持たない生の圧縮ストリームもサポートされています。さらに、lzip で使用される .lz 形式の解凍もサポートされています。

xz は、選択した操作モードに従って各ファイルを圧縮または解凍します。ファイルが指定されていない場合、またはファイルが - の場合は、xz は標準入力から読み取り、処理されたデータを標準出力に書き込みます。xz は、標準出力がターミナルである場合に、圧縮されたデータを標準出力に書き込むことを拒否し、エラーを表示してファイルをスキップします。同様に、xz は、標準入力がターミナルである場合に、圧縮されたデータを標準入力から読み取ることを拒否します。

--stdout が指定されていない限り、- 以外のファイルは、ターゲットファイル名がソースファイル名から派生した新しいファイルに書き込まれます。

圧縮する場合、ターゲットファイル形式 (.xz または .lzma) のサフィックスがソースファイル名に追加されて、ターゲットファイル名が作成されます。

解凍する場合、.xz、.lzma、または .lz のサフィックスがファイル名から削除されて、ターゲットファイル名が作成されます。xz は、.txz および .tlz のサフィックスも認識し、それらを .tar サフィックスに置き換えます。

ターゲットファイルがすでに存在する場合、エラーが表示され、ファイルはスキップされます。

標準出力への書き込みでない限り、xz は、次のいずれかの条件が満たされる場合に、警告を表示してファイルをスキップします。

ファイルは通常のファイルではありません。シンボリックリンクはたどられず、したがって通常のファイルとは見なされません。

ファイルには、1 つ以上のハードリンクがあります。

ファイルに setuid、setgid、またはスティッキービットが設定されています。

操作モードが圧縮に設定されており、ファイルにすでにターゲットファイル形式 (.xz または .txz で .xz 形式に圧縮する場合、および .lzma または .tlz で .lzma 形式に圧縮する場合) のサフィックスが付いています。

操作モードが解凍に設定されており、ファイルにサポートされているファイル形式 (.xz、.txz、.lzma、.tlz、または .lz) のいずれかのサフィックスが付いていません。


正常に圧縮または解凍が完了した後、xz は元のファイルの所有者、グループ、権限、アクセス時刻、および変更時刻をターゲットファイルにコピーします。 グループのコピーに失敗した場合、ターゲットファイルが元のファイルにアクセスできなかったユーザーに対してアクセス可能にならないように、権限が変更されます。 xz は、アクセス制御リストや拡張属性などの他のメタデータのコピーはまだサポートしていません。

ターゲットファイルが正常に閉じられると、ソースファイルは --keep が指定されていない限り削除されます。 ソースファイルは、出力が標準出力に書き込まれた場合、またはエラーが発生した場合には決して削除されません。

xz プロセスに SIGINFO または SIGUSR1 を送信すると、進捗情報が標準エラー出力に表示されます。 これは限定的な使用にすぎませんが、標準エラー出力がターミナルである場合は、--verbose を使用すると、自動的に更新される進捗インジケーターが表示されます。

メモリ使用量

xz のメモリ使用量は、圧縮設定によって数百キロバイトから数ギガバイトまで変化します。 ファイルを圧縮するときに使用する設定は、解凍プログラムのメモリ要件を決定します。 通常、解凍プログラムは、圧縮プログラムがファイルを作成するときに使用したメモリ量の 5% ~ 20% のメモリを必要とします。 たとえば、xz -9 で作成されたファイルを解凍するには、現在 65MiB のメモリが必要です。 ただし、数ギガバイトのメモリを必要とする .xz ファイルも存在します。

特に古いシステムを使用しているユーザーは、非常に大きなメモリ使用量が不満に感じる場合があります。 予期せぬ事態を防ぐために、xz には組み込みのメモリ使用量制限機能があり、これはデフォルトでは無効になっています。 一部のオペレーティングシステムでは、プロセスのメモリ使用量を制限する方法が提供されていますが、これに依存することは、十分な柔軟性がないと判断されました (たとえば、ulimit(1) を使用して仮想メモリを制限すると、mmap(2) の使用が妨げられる可能性があります)。

メモリ使用量制限機能は、コマンドラインオプション --memlimit=limit で有効にできます。 環境変数 XZ_DEFAULTS を設定して、制限機能をデフォルトで有効にすることもできます。たとえば、XZ_DEFAULTS=--memlimit=150MiB と設定します。 圧縮と解凍の制限を個別に設定するには、--memlimit-compress=limit および --memlimit-decompress=limit を使用できます。 ただし、これらのオプションを XZ_DEFAULTS の外で使用することは、xz の 1 回の実行では圧縮と解凍を同時に行うことはできないため、ほとんど役に立ちません。また、--memlimit=limit (または -M limit) の方が、コマンドラインで入力する際に短くなります。

解凍時に指定されたメモリ使用量制限を超えると、xz はエラーを表示し、ファイルの解凍は失敗します。 圧縮時に制限を超えると、xz は設定を調整して制限を超えないようにします (ただし、--format=raw または --no-adjust を使用する場合は例外)。 このようにして、制限が非常に小さい場合にのみ、操作が失敗します。 設定の調整は、圧縮レベルのプリセットに対応しないステップで行われます。たとえば、制限が xz -9 に必要な量よりもわずかに小さい場合、設定は xz -8 まで大きく下げるのではなく、わずかに調整されます。


.xzファイルの連結とパディング

.xzファイルをそのまま連結できます。xzは、連結されたファイルを単一の.xzファイルであるかのように解凍します。

連結された部分の間に、または最後の部分の後にパディングを挿入できます。パディングはnullバイトで構成する必要があり、パディングのサイズは4バイトの倍数である必要があります。これは、たとえば、.xzファイルが512バイトブロックでファイルサイズを測定するメディアに保存されている場合に役立ちます。

.lzmaファイルまたは生のストリームでは、連結とパディングは許可されていません。

オプション

整数接尾辞と特殊値

整数の引数が予想されるほとんどすべての場所で、オプションの接尾辞を使用して大きな整数を簡単に示すことができます。整数と接尾辞の間にはスペースを入れないでください。

KiB 整数に1,024(2^10)を掛けます。Ki、k、kB、K、およびKBは、KiBの同義語として受け入れられます。

MiB 整数に1,048,576(2^20)を掛けます。Mi、m、M、およびMBは、MiBの同義語として受け入れられます。

GiB 整数に1,073,741,824(2^30)を掛けます。Gi、g、G、およびGBは、GiBの同義語として受け入れられます。

特殊値maxを使用して、オプションでサポートされている最大整数値を示すことができます。

操作モード

複数の操作モードオプションが与えられた場合、最後に指定されたものが有効になります。

-z、--compress
圧縮します。これは、操作モードオプションが指定されていない場合、またはコマンド名から別の操作モードが暗示されていない場合のデフォルトの操作モードです(たとえば、unxzは--decompressを意味します)。

圧縮が成功すると、ソースファイルは標準出力への書き込み、または--keepが指定されていない限り削除されます。

-d、--decompress、--uncompress
解凍します。解凍が成功すると、ソースファイルは標準出力への書き込み、または--keepが指定されていない限り削除されます。

-t、--test
圧縮ファイルの整合性をテストします。このオプションは、--decompress --stdoutと同等ですが、解凍されたデータは標準出力に書き込まれるのではなく破棄されます。ファイルは作成または削除されません。

-l、--list
圧縮ファイルに関する情報を表示します。解凍された出力は生成されず、ファイルは作成または削除されません。リストモードでは、プログラムは標準入力またはその他のシーク不可能なソースから圧縮データを読み取ることができません。

デフォルトのリスト表示では、基本的なファイル情報が1行に1ファイルずつ表示されます。より詳細な情報を取得するには、--verboseオプションも使用します。さらに詳細な情報を取得するには、--verboseを2回使用しますが、すべての追加情報を取得するには多くのシークが必要になるため、時間がかかる場合があります。詳細な出力の幅は80文字を超えているため、出力を、たとえば、less -Sにパイプすると、端末の幅が十分でない場合に便利です。


正確な出力は、xz のバージョンやロケールによって異なる場合があります。 機械可読な出力が必要な場合は、--robot --list を使用してください。

操作修飾子

-k, --keep

入力ファイルを削除しません。

xz 5.2.6 以降では、このオプションは、入力が通常のファイルへのシンボリックリンクであるか、複数のハードリンクを持つか、または setuid、setgid、またはスティッキービットが設定されている場合でも、xz が圧縮または解凍を実行するようにします。setuid、setgid、およびスティッキービットは、ターゲットファイルにはコピーされません。古いバージョンでは、これは --force を使用した場合にのみ行われていました。

-f, --force

このオプションには、いくつかの効果があります。

ターゲットファイルがすでに存在する場合、圧縮または解凍する前に削除します。

入力が通常のファイルへのシンボリックリンクであるか、複数のハードリンクを持つか、または setuid、setgid、またはスティッキービットが設定されている場合でも、圧縮または解凍します。setuid、setgid、およびスティッキービットは、ターゲットファイルにはコピーされません。

--decompress --stdout とともに使用し、xz がソースファイルのタイプを認識できない場合、ソースファイルをそのまま標準出力にコピーします。これにより、xzcat --force を cat(1) のように、xz で圧縮されていないファイルに使用できるようになります。ただし、将来、xz は新しい圧縮ファイル形式をサポートする可能性があり、その場合、より多くのタイプのファイルを解凍する代わりに、そのまま標準出力にコピーするようになる可能性があります。--format=format を使用して、xz が解凍するファイル形式を単一の形式に制限できます。

-c, --stdout, --to-stdout

圧縮または解凍されたデータをファイルではなく、標準出力に書き込みます。これは --keep を意味します。

--single-stream

最初の .xz ストリームのみを解凍し、ストリームの後に続く可能性のある入力データを静かに無視します。通常、このような末尾のガベージがあると、xz はエラーを表示します。

xz は .lzma ファイルまたは生のストリームから 1 つ以上のストリームを解凍しませんが、このオプションを使用すると、xz は .lzma ファイルまたは生のストリームの後の可能性のある末尾のデータを無視します。

このオプションは、操作モードが --decompress または --test でない場合は効果がありません。

xz 5.7.1alpha 以降では、--single-stream は --keep を意味します。

--no-sparse

スパースファイルの作成を無効にします。デフォルトでは、通常のファイルに解凍する場合、xz は解凍されたデータに長いゼロのシーケンスが含まれている場合、ファイルをスパースにしようとします。また、標準出力が通常のファイルに接続されており、安全にするための特定の追加条件が満たされている場合にも、標準出力に書き込むときに機能します。スパースファイルを作成すると、ディスクスペースを節約し、ディスク I/O の量を減らすことで、解凍速度を向上させることができます。

-S .suf, --suffix=.suf

圧縮するときに、.suf をターゲットファイルのサフィックスとして .xz または .lzma の代わりに使います。標準出力に書き込んでいない場合、ソースファイルにすでに .suf のサフィックスが付いている場合は、警告が表示され、ファイルはスキップされます。

解凍するときには、.xz、.txz、.lzma、.tlz、または .lz のサフィックスに加えて、.suf のサフィックスを持つファイルも認識します。ソースファイルに .suf のサフィックスが付いている場合は、サフィックスを削除してターゲットファイル名を取得します。


生のストリームを圧縮または解凍する場合(--format=raw)、標準出力に出力する場合を除き、常にサフィックスを指定する必要があります。これは、生のストリームにはデフォルトのサフィックスがないためです。

^ -files[=file] 処理するファイル名をファイルから読み込みます。ファイルが指定されていない場合、ファイル名は標準入力から読み込まれます。ファイル名は改行文字で区切られている必要があります。ハイフン(-)は通常のファイル名として扱われ、標準入力を意味しません。ファイル名がコマンドライン引数としても指定されている場合、それらはファイルから読み込まれるファイル名の前に処理されます。

^ -files0[=file] これは --files[=file] と同じですが、各ファイル名はヌル文字で区切られている必要があります。

基本的なファイル形式と圧縮オプション

^ F format, --format=format 圧縮または解凍するファイル形式を指定します。

^ uto これはデフォルトです。圧縮する場合、autoxz と同じです。解凍する場合、入力ファイルの形式は自動的に検出されます。ただし、生のストリーム(--format=raw で作成されたもの)は自動的に検出できません。

^ z ^ xz ファイル形式で圧縮するか、解凍時に .xz ファイルのみを受け入れます。

^ zma 従来の .lzma ファイル形式で圧縮するか、解凍時に .lzma ファイルのみを受け入れます。alone という代替名は、LZMA Utilsとの後方互換性のために提供されています。

^ zip 解凍時に .lz ファイルのみを受け入れます。圧縮はサポートされていません。

^ lz 形式のバージョン 0 と 1 がサポートされています。バージョン 0 のファイルは lzip 1.3 以前で作成されました。これらのファイルは一般的ではありませんが、ファイルアーカイブから見つかることがあります。また、古いバージョンのソースパッケージがこの形式でリリースされたものや、個人が古いファイルを作成してこの形式で保存している場合があります。lzip 1.18 では、バージョン 0 の形式の解凍サポートが削除されました。lzip 1.4 以降は、バージョン 1 の形式でファイルを作成します。

^ aw 生のストリーム(ヘッダーなし)を圧縮または解凍します。これは上級ユーザー向けです。生のストリームをデコードするには、--format=raw を使用し、通常はコンテナヘッダーに保存されていたフィルターチェーンを明示的に指定する必要があります。

^ C check, --check=check 整合性チェックの種類を指定します。チェックは、非圧縮データから計算され、.xz ファイルに保存されます。このオプションは、.xz 形式で圧縮する場合にのみ有効です。.lzma 形式は整合性チェックをサポートしていません。整合性チェック(存在する場合)は、.xz ファイルが解凍されるときに検証されます。

サポートされているチェックの種類:

^ one 整合性チェックを一切行いません。通常は良い方法ではありません。ただし、データの整合性が他の方法で検証されている場合は、役立つことがあります。

^ rc32 IEEE-802.3(イーサネット)の多項式を使用して CRC32 を計算します。

^ rc64 ECMA-182 の多項式を使用して CRC64 を計算します。これはデフォルトであり、ファイルが破損している場合に CRC32 よりもわずかに優れた検出能力を持ち、速度の差は無視できる程度です。


sha256 SHA-256 を計算します。 これは、CRC32 および CRC64 よりも遅くなります。

.xz ヘッダーの整合性は、常に CRC32 を使用して検証されます。 これを変更または無効にすることはできません。

--ignore-check

圧縮データの整合性チェックを解凍時に行わないようにします。 .xz ヘッダー内の CRC32 値は、通常どおり検証されます。

このオプションを使用する場合は、十分な注意が必要です。 このオプションを使用する理由として考えられるのは、次のとおりです。

破損した .xz ファイルからデータを回復しようとしている場合。

解凍を高速化する場合。 これは、SHA-256 を使用する場合、または非常に優れた圧縮率で圧縮されたファイルの場合に最も重要です。 このオプションを、ファイルの整合性を他の方法で外部で検証しない限り、使用することはお勧めしません。

-0 ... -9

圧縮プリセットレベルを選択します。 デフォルトは -6 です。 複数のプリセットレベルを指定した場合、最後に指定されたレベルが適用されます。 既にカスタムフィルターチェーンが指定されている場合は、圧縮プリセットレベルを設定すると、カスタムフィルターチェーンがクリアされます。

プリセット間の違いは、gzip(1) および bzip2(1) よりも大きくなります。 選択した圧縮設定は、解凍プログラムのメモリ要件を決定するため、高すぎるプリセットレベルを使用すると、古いシステムで解凍するのが困難になる可能性があります。 特に、-9 を gzip(1) および bzip2(1) で行うように、すべてのファイルに無条件に -9 を使用することは、あまり良い方法ではありません。

-0 ... -3

これらは、比較的高速なプリセットです。 -0 は、gzip -9 よりも高速でありながら、はるかに優れた圧縮率を実現することがあります。 上位のプリセットは、bzip2(1) と同様の速度で、圧縮率も同等かそれ以上になることがよくあります。ただし、結果は圧縮するデータの種類によって大きく異なります。

-4 ... -6

優れた圧縮率でありながら、古いシステムでも解凍プログラムのメモリ使用量を合理的な範囲に抑えることができます。 -6 はデフォルトであり、通常は、16 MiB の RAM しかないシステムでも解凍できるファイルを配布するのに適した選択肢です。 (-5e または -6e も検討する価値があります。 --extreme を参照してください。)

-7 ... -9

これらは -6 に似ていますが、圧縮プログラムと解凍プログラムのメモリ要件が高くなります。 これらは、8 MiB、16 MiB、および 32 MiB よりも大きいファイルを圧縮する場合にのみ役立ちます。

同じハードウェアでは、解凍速度は、解凍されたデータのバイト数でほぼ一定です。 つまり、圧縮率が高いほど、通常は解凍速度が速くなります。 また、1 秒間に生成される解凍済み出力の量も大きく異なる場合があります。

次の表は、プリセットの機能の概要を示しています。

Preset DictSize CompCPU CompMem DecMem -0 256 KiB 0 3 MiB 1 MiB -1 1 MiB 1 9 MiB 2 MiB -2 2 MiB 2 17 MiB 3 MiB -3 4 MiB 3 32 MiB 5 MiB -4 4 MiB 4 48 MiB 5 MiB -5 8 MiB 5 94 MiB 9 MiB -6 8 MiB 6 94 MiB 9 MiB -7 16 MiB 6 186 MiB 17 MiB -8 32 MiB 6 370 MiB 33 MiB -9 64 MiB 6 674 MiB 65 MiB


列の説明:

DictSize は LZMA2 辞書のサイズです。辞書のサイズが非圧縮ファイルのサイズよりも大きい場合、メモリが無駄になります。そのため、特に必要がない場合は、-7 ~ -9 のプリセットを使用しない方が良いでしょう。-6 以下の設定では、無駄になるメモリの量は通常少なく、問題になりません。

CompCPU は、圧縮速度に影響を与える LZMA2 設定を簡略化したものです。辞書のサイズも速度に影響するため、CompCPU が同じでも、-6 ~ -9 のレベルが高いほど、わずかに速度が遅くなる傾向があります。さらに遅く、ひいては圧縮率を向上させるには、--extreme を参照してください。

CompMem は、シングルスレッドモードでのコンプレッサーに必要なメモリ量です。xz のバージョンによってわずかに異なる場合があります。

DecMem は、デコンプレッサーに必要なメモリ量です。つまり、圧縮設定によってデコンプレッサーのメモリ要件が決まります。正確なデコンプレッサーのメモリ使用量は、LZMA2 辞書のサイズよりもわずかに大きいですが、表の値は最も近い MiB に切り上げられています。

マルチスレッドモードでは、シングルスレッドモードと比較して、メモリ要件が大幅に増加します。デフォルトの --block-size の値を使用すると、各スレッドは 3*3*DictSize に CompMem または DecMem を加えたメモリが必要です。たとえば、4 つのスレッドで -6 のプリセットを使用する場合、660 ~ 670 MiB のメモリが必要です。

-e, --extreme

選択した圧縮プリセットレベル (-0 ~ -9) のより遅いバリアントを使用して、わずかに圧縮率を向上させますが、運が悪いと、かえって悪化する可能性があります。デコンプレッサーのメモリ使用量に影響はありませんが、プリセットレベル -0 ~ -3 では、コンプレッサーのメモリ使用量がわずかに増加します。

辞書のサイズが 4 MiB と 8 MiB のプリセットが 2 つあるため、-3e と -5e のプリセットは、-4e と -6e よりもわずかに高速な設定 (CompCPU が低い) を使用します。これにより、どの 2 つのプリセットも同じではなくなります。

プリセット DictSize CompCPU CompMem DecMem -0e 256 KiB 8 4 MiB 1 MiB -1e 1 MiB 8 13 MiB 2 MiB -2e 2 MiB 8 25 MiB 3 MiB -3e 4 MiB 7 48 MiB 5 MiB -4e 4 MiB 8 48 MiB 5 MiB -5e 8 MiB 7 94 MiB 9 MiB -6e 8 MiB 8 94 MiB 9 MiB -7e 16 MiB 8 186 MiB 17 MiB -8e 32 MiB 8 370 MiB 33 MiB -9e 64 MiB 8 674 MiB 65 MiB

たとえば、8 MiB の辞書を使用するプリセットは合計 4 つあり、最も高速から最も遅い順に、-5、-6、-5e、-6e となります。

--fast
--best これらは、-0 および -9 のどちらにも対応する誤解を招くエイリアスです。これらのオプションは、LZMA ユーティリティとの互換性のために提供されているだけで、使用しないことをお勧めします。

--block-size=size

.xz 形式に圧縮する場合、入力データをサイズ バイトのブロックに分割します。ブロックは互いに独立して圧縮され、これによりマルチスレッディングが容易になり、限られたランダムアクセスによるデコンプレッションが可能になります。このオプションは通常、マルチスレッドモードでデフォルトのブロックサイズをオーバーライドするために使用されますが、シングルスレッドモードでも使用できます。

多スレッドモードでは、各スレッドで入力と出力のバッファリングのために、約 3 倍のサイズのバイトが割り当てられます。デフォルトサイズは、LZMA2 辞書のサイズの 3 倍、または 1MiB のいずれか大きい方です。通常、LZMA2 辞書のサイズの 2 ~ 4 倍、または少なくとも 1 MiB が適切な値です。LZMA2 辞書のサイズよりも小さい値を使用すると、LZMA2 辞書バッファが完全に使用されないため、RAM の無駄になります。多スレッドモードでは、ブロックのサイズはブロックヘッダーに保存されます。このサイズ情報は、多スレッドでの解凍に必要です。

シングルスレッドモードでは、デフォルトではブロック分割は行われません。このオプションを設定しても、メモリ使用量には影響しません。ブロックヘッダーにサイズ情報は保存されないため、シングルスレッドモードで作成されたファイルは、多スレッドモードで作成されたファイルと同一ではありません。サイズ情報がないため、xz はこれらのファイルを多スレッドモードで解凍できません。

^ -block-list=items ^ xz 形式で圧縮する場合、指定された間隔で未圧縮データとともに、オプションのカスタムフィルターチェーンを使用して新しいブロックを開始します。

^ tems はカンマ区切りのリストです。各アイテムは、0 ~ 9 のオプションのフィルターチェーン番号の後にコロン (:)、および必須の未圧縮データサイズで構成されます。アイテムを省略すること(2 つ以上の連続するカンマ)は、前のアイテムのサイズとフィルターを使用するショートカットです。

入力ファイルが items 内のサイズの合計よりも大きい場合、最後のアイテムはファイルの最後まで繰り返されます。特別な値として 0 を最後のサイズとして使用して、残りのファイルを単一のブロックとしてエンコードすることを指定できます。

各ブロックに対して、--filters1=filters ... --filters9=filters オプションと組み合わせて、別のフィルターチェーンを指定できます。これらのオプションは、1 ~ 9 の識別子を持つフィルターチェーンを定義します。フィルターチェーン 0 を使用して、デフォルトのフィルターチェーンを参照できます。デフォルトのフィルターチェーンは、フィルターチェーンを指定しない場合と同じです。フィルターチェーン識別子は、未圧縮データサイズの前に使用し、コロン (:) で区切ります。たとえば、--block-list=1:2MiB,3:2MiB,2:4MiB,,2MiB,0:4MiB を指定した場合、ブロックは次のように作成されます。

^ -filters1 で指定されたフィルターチェーンと 2 MiB の入力

^ -filters3 で指定されたフィルターチェーンと 2 MiB の入力

^ -filters2 で指定されたフィルターチェーンと 4 MiB の入力

^ -filters2 で指定されたフィルターチェーンと 4 MiB の入力

デフォルトのフィルターチェーンと 2 MiB の入力

デフォルトのフィルターチェーンと 4 MiB の入力。入力ファイルの最後まで、この設定が繰り返されます。

エンコーダーのブロックサイズ(多スレッドモードのデフォルト値、または --block-size=size で指定された値)を超えるサイズを指定した場合、エンコーダーは items で指定された境界線を維持しながら、追加のブロックを作成します。たとえば、--block-size=10MiB --block-list=5MiB,10MiB,8MiB,12MiB,24MiB を指定し、入力ファイルが 80 MiB の場合、5、10、8、10、2、10、10、4、10、10、および 1 MiB の 11 個のブロックが生成されます。


マルチスレッドモードでは、ブロックのサイズはブロックヘッダーに格納されます。 シングルスレッドモードではこれは行われないため、エンコードされた出力はマルチスレッドモードの出力とは同一にはなりません。

--flush-timeout=timeout

圧縮中に、前回のフラッシュから timeout ミリ秒(正の整数)以上経過し、さらに入力の読み込みがブロックされる場合、保留中のすべての入力データがエンコーダーからフラッシュされ、出力ストリームで利用可能になります。これは、xz を使用してネットワーク経由でストリーミングされるデータを圧縮する場合に役立ちます。小さな timeout 値は、受信側でデータをわずかな遅延で利用できるようにしますが、大きな timeout 値は、より優れた圧縮率をもたらします。

この機能はデフォルトで無効になっています。このオプションが複数回指定された場合、最後のものが有効になります。特殊な timeout 値 0 を使用すると、この機能を明示的に無効にできます。

この機能は、非 POSIX システムでは利用できません。

この機能はまだ実験的です。現在、xz のバッファリングの方法のため、ストリームをリアルタイムで解凍するには不向きです。

--no-sync

ターゲットファイルとそのディレクトリをストレージデバイスに同期して、ソースファイルを削除する前に同期しません。これにより、多数の小さなファイルを圧縮または解凍する場合のパフォーマンスが向上します。ただし、システムが削除の直後にクラッシュすると、ターゲットファイルがストレージデバイスに書き込まれていないにもかかわらず、削除操作が実行された可能性があります。その場合、元のソースファイルもターゲットファイルも利用できなくなります。

このオプションは、xz がソースファイルを削除する場合にのみ効果があります。それ以外の場合は、同期は行われません。

同期と --no-sync は、xz 5.7.1alpha で追加されました。

--memlimit-compress=limit

圧縮のメモリ使用量の上限を設定します。このオプションが複数回指定された場合、最後のものが有効になります。

圧縮設定が上限を超えた場合、xz は設定を調整して上限を超えなくするように試み、自動調整が実行されたことを示すメッセージを表示します。調整は、次の順序で行われます。スレッド数の削減、マルチスレッドモードで 1 つのスレッドでも上限を超えた場合にシングルスレッドモードに切り替え、最後に LZMA2 辞書のサイズを削減します。

--format=raw で圧縮する場合、または --no-adjust が指定されている場合は、圧縮出力に影響を与えずに実行できるため、スレッド数のみを削減します。

上記の調整でも上限を満たすことができない場合、エラーが表示され、xz は終了ステータス 1 で終了します。


制限は、いくつかの方法で指定できます。

制限は、バイト単位の絶対値として指定できます。整数接尾辞(例:MiB)を使用すると便利です。例:--memlimit-compress=80MiB

制限は、合計物理メモリ(RAM)の割合として指定できます。これは、特にシェル初期化スクリプトで XZ_DEFAULTS 環境変数を設定し、それを異なるコンピューター間で共有する場合に便利です。このようにすると、制限は、より多くのメモリを持つシステムで自動的に大きくなります。例:--memlimit-compress=70%

制限は、0に設定することで、デフォルト値にリセットできます。これは現在、制限を最大値(メモリ使用量の制限なし)に設定することと同等です。

32ビットxzの場合、特別なケースがあります。制限が4020MiBを超えると、制限は4020MiBに設定されます。MIPS32では、代わりに2000MiBが使用されます。(0と最大値は影響を受けません。同様の機能は、圧縮解除にはありません。)これは、32ビット実行可能ファイルが4GiBのアドレス空間(MIPS32では2GiB)にアクセスできる場合に役立ち、他の状況でも悪影響がない可能性があります。

「メモリ使用量」のセクションも参照してください。

`--memlimit-decompress=limit`
圧縮解除のメモリ使用量制限を設定します。これは、`--list`モードにも影響します。操作が制限を超えずに実行できない場合、xzはエラーを表示し、ファイルの圧縮解除は失敗します。可能な制限の指定方法については、`--memlimit-compress=limit`を参照してください。

`--memlimit-mt-decompress=limit`
マルチスレッド圧縮解除のメモリ使用量制限を設定します。これは、スレッド数にのみ影響し、xzがファイルの圧縮解除を拒否することはありません。制限が低すぎてマルチスレッドが許可されない場合、制限は無視され、xzはシングルスレッドモードで続行されます。また、`--memlimit-decompress`も使用している場合、これは常にシングルスレッドモードとマルチスレッドモードの両に適用され、したがってマルチスレッドの有効な制限は、`--memlimit-decompress`で設定された制限よりも大きくなることはありません。

他のメモリ使用量制限オプションとは対照的に、`--memlimit-mt-decompress=limit`はシステム固有のデフォルト制限を持ちます。現在の値は、`xz --info-memory`を使用して確認できます。

このオプションとそのデフォルト値が存在するのは、制限がない場合、スレッド化された圧縮解除が、特定の入力ファイルで途方もない量のメモリを割り当てる可能性があるためです。デフォルトの制限がシステムで低すぎる場合は、制限を増やすことができますが、適切な入力ファイルがある場合、xzはその量のメモリを使用するため、使用可能なRAMよりも大きな値に設定しないでください。メモリ不足またはスワップが発生しても、圧縮解除のパフォーマンスは向上しません。

可能な制限の指定方法については、`--memlimit-compress=limit`を参照してください。制限を0に設定すると、制限はデフォルトのシステム固有の値にリセットされます。

`-M limit`, `--memlimit=limit`, `--memory=limit`
これは、`--memlimit-compress=limit --memlimit-decompress=limit --memlimit-mt-decompress=limit`を指定することと同等です。

--no-adjust

メモリ使用量の制限を満たすために、圧縮出力に影響を与える設定を調整することを許可しない。つまり、これにより、xz はエンコーダーをマルチスレッドモードからシングルスレッドモードに切り替えたり、LZMA2 辞書サイズを減らしたりすることを防ぐ。このオプションを使用する場合でも、メモリ使用量の制限を満たすためにスレッド数が減ることがあるが、これは圧縮出力に影響を与えない。

自動調整は、生のストリームを作成する場合 (--format=raw) には常に無効になる。

-T threads, --threads=threads

使用するワーカー スレッドの数を指定する。threads を特殊な値 0 に設定すると、xz はシステム上のプロセッサがサポートする最大数のスレッドを使用する。実際のスレッド数は、入力ファイルが指定された設定でスレッド化するのに十分な大きさでない場合、またはより多くのスレッドを使用するとメモリ使用量の制限を超えてしまう場合に、threads よりも少なくなる場合がある。

シングルスレッド コンプレッサーとマルチスレッド コンプレッサーは、異なる出力を生成する。シングルスレッド コンプレッサーは最小のファイル サイズになるが、マルチスレッド コンプレッサーからの出力のみが、複数のスレッドを使用して解凍できる。threads を 1 に設定すると、シングルスレッド モードが使用される。threads を他の値 (0 を含む) に設定すると、システムが 1 つのハードウェア スレッドしかサポートしていない場合でも、マルチスレッド コンプレッサーが使用される。(xz 2.x はこの場合、シングルスレッド モードを使用していた。)

マルチスレッド モードを 1 つのスレッドでのみ使用するには、threads を +1 に設定する。+ プレフィックスは、他の値では効果がない。メモリ使用量の制限により、--no-adjust を使用しない限り、xz がシングルスレッド モードに切り替わる可能性もある。+ プレフィックスのサポートは、xz 5.4.0 で追加された。

自動スレッド数が要求され、メモリ使用量の制限が指定されていない場合、システム固有のデフォルトのソフト制限が使用され、スレッド数が制限される可能性がある。これは、スレッド数が 1 になった場合は無視されるという点でソフト制限であり、したがって、ソフト制限は xz が圧縮または解凍を停止することはない。このデフォルトのソフト制限は、xz をマルチスレッドモードからシングルスレッドモードに切り替えさせない。アクティブな制限は、xz --info-memory で確認できる。

現在、スレッド化の唯一の方法は、入力をブロックに分割し、それらを互いに独立して圧縮することである。デフォルトのブロックサイズは、圧縮レベルによって異なり、--block-size=size オプションでオーバーライドできる。

スレッド化された解凍は、複数のブロックとブロックヘッダー内のサイズ情報を含むファイルでのみ機能する。十分に大きいファイルでマルチスレッドモードで圧縮されたファイルはすべて、この条件を満たすが、--block-size=size が使用された場合でも、シングルスレッドモードで圧縮されたファイルはそうではない。

threads のデフォルト値は 0 である。xz 5.4.x 以前では、デフォルトは 1 だった。

カスタム コンプレッサー フィルターチェーン

カスタムフィルターチェーンを使用すると、プリセットに関連付けられた設定に依存する代わりに、詳細な圧縮設定を指定できる。カスタムフィルターチェーンが指定されると、それよりも前にコマンドラインで指定されたプリセットオプション (-0 ... -9 および --extreme) は無視される。プリセットオプションが、1 つ以上のカスタムフィルターチェーンオプションの後に指定された場合、新しいプリセットが有効になり、それよりも前に指定されたカスタムフィルターチェーンオプションは無視される。


フィルターチェーンは、コマンドラインでのパイプ処理に似ています。圧縮時には、非圧縮入力が最初のフィルターに送られ、その出力が次のフィルター(存在する場合)に送られます。最後のフィルターの出力は、圧縮ファイルに書き込まれます。チェーン内のフィルターの最大数は4ですが、通常、フィルターチェーンには1つまたは2つのフィルターしかありません。

多くのフィルターは、フィルターチェーン内の配置に制限があります。一部のフィルターは、チェーンの最後のフィルターとしてのみ機能し、一部のフィルターは、最後のフィルターとして機能しないフィルターとしてのみ機能し、一部のフィルターは、チェーン内の任意の場所に配置できます。この制限は、フィルターによって、フィルター自体の設計に固有であるか、セキュリティ上の問題を回避するために存在します。

カスタムフィルターチェーンは、2つの異なる方法で指定できます。`--filters=filters`および`--filters1=filters ... --filters9=filters`オプションを使用すると、liblzmaフィルター文字列構文を使用して、1つのオプションで完全なフィルターチェーンを指定できます。あるいは、個々のフィルターオプションを、フィルターチェーンに含めたい順序で使用して、フィルターチェーンを指定することもできます。つまり、個々のフィルターオプションの順序が重要です!生のストリームをデコードする(`--format=raw`)場合、フィルターチェーンは、圧縮時に指定されたのと同じ順序で指定する必要があります。完全なチェーンオプション(`--filters=filters`)の前に指定された個々のフィルターまたはプリセットオプションは、すべて無視されます。完全なチェーンオプションの後に指定された個々のフィルターは、フィルターチェーンをリセットします。

完全なフィルターと個別のフィルターオプションの両方で、フィルター固有のオプションをカンマ区切りのリストとして指定できます。オプション内の余分なカンマは無視されます。すべてのオプションにはデフォルト値があるので、変更したいオプションのみを指定してください。

完全なフィルターチェーンとオプションを確認するには、`xz -vv`(つまり、`--verbose`を2回使用)を使用します。これは、プリセットによって使用されるフィルターチェーンオプションを表示するためにも使用できます。

`--filters=filters`
完全なフィルターチェーンまたはプリセットを単一のオプションで指定します。各フィルターは、スペースまたは2つのハイフン(`--`)で区切ることができます。`filters`は、シェルコマンドラインで引用符で囲む必要がある場合があります。オプションを指定するには、コロン(`:`)または等号(`=`)を使用します。プリセットは、ハイフン(`-`)で始まり、0個以上のフラグが続きます。サポートされているフラグは、`e`のみで、`--extreme`と同じオプションを適用します。

`--filters1=filters ... --filters9=filters`
`--block-list`で使用できる最大9つの追加フィルターチェーンを指定します。

たとえば、実行可能ファイルとテキストファイルを含むアーカイブを圧縮する場合、実行可能部分はBCJフィルターを含むフィルターチェーンを使用し、テキスト部分はLZMA2フィルターのみを使用できます。

--filters-help
指定のプリセットとカスタムフィルターチェーンを `--filters` および `--filters1=filters ... --filters9=filters` オプションで指定する方法を説明するヘルプメッセージを表示し、正常に終了します。

--lzma1[=options]
--lzma2[=options]
フィルターチェーンの最後のフィルターとしてのみ使用できる、LZMA1またはLZMA2フィルターをフィルターチェーンに追加します。

LZMA1はレガシーフィルターであり、主にレガシーの`.lzma`ファイル形式をサポートするためにサポートされています。`.lzma`ファイル形式はLZMA1のみをサポートします。LZMA2は、LZMA1の実用的な問題を修正したLZMA1の改良版です。`.xz`形式はLZMA2を使用し、LZMA1はまったくサポートしていません。LZMA1とLZMA2の圧縮速度と比率はほぼ同じです。

LZMA1とLZMA2は、次のオプションを共有します。

preset=preset
すべてのLZMA1またはLZMA2オプションをプリセットにリセットします。プリセットは整数で構成され、その後に単一の文字のプリセット修飾子が続く場合があります。整数は0〜9で、コマンドラインオプション-0 ... -9に対応します。現在サポートされている修飾子は1つだけで、`e`であり、`--extreme`に対応します。プリセットが指定されていない場合、LZMA1またはLZMA2オプションのデフォルト値は、プリセット6から取得されます。

dict=size
辞書(履歴バッファー)サイズは、最近処理された未圧縮データのバイト数をメモリに保持することを示します。アルゴリズムは、未圧縮データ内の繰り返されるバイトシーケンス(マッチ)を見つけて、それを現在辞書にあるデータへの参照で置き換えるようにします。辞書が大きいほど、マッチを見つける可能性が高くなります。したがって、辞書のサイズを大きくすると、通常は圧縮率が向上しますが、辞書のサイズが未圧縮ファイルよりも大きい場合は、メモリが無駄になります。

一般的な辞書のサイズは、64KiBから64MiBです。最小値は4KiBです。圧縮の場合の最大値は現在1.5GiB(1536MiB)です。デコンプレッサーは、LZMA1およびLZMA2ストリーム形式の最大値である4GiBの1バイト未満の辞書をサポートしています。

辞書のサイズとマッチファインダー(mf)は、LZMA1またはLZMA2エンコーダーのメモリ使用量を決定します。同じ(またはより大きい)辞書のサイズは、圧縮に使用された場合と同じように、デコードに使用する必要があります。したがって、デコーダーのメモリ使用量は、圧縮時に使用された辞書のサイズによって決定されます。`.xz`ヘッダーには、辞書のサイズが2^nまたは2^n + 2^(n-1)として格納されます。そのため、これらのサイズは圧縮に推奨されます。他のサイズの場合、`.xz`ヘッダーに格納する際に切り上げられます。

lc=lc リテラルのコンテキストビット数を指定します。最小値は0で、最大値は4です。デフォルトは3です。さらに、lcとlpの合計は4を超えてはなりません。

マッチとしてエンコードできないすべてのバイトは、リテラルとしてエンコードされます。つまり、リテラルは単に8ビットのバイトであり、1つずつエンコードされます。

リテラルコーディングは、前の未圧縮バイトの上位lcビットが次のバイトと相関するという仮定を行います。たとえば、典型的な英語のテキストでは、大文字の後に小文字が続くことが多く、小文字の後に別の小文字が続くことがよくあります。US-ASCII文字セットでは、最上位の3ビットは、大文字の場合は010、小文字の場合は011です。lcが少なくとも3の場合、リテラルコーディングは、未圧縮データでこのプロパティを利用できます。

デフォルト値(3)は通常、適切です。最大の圧縮を希望する場合は、lc=4をテストしてください。 場合によってはわずかに効果があり、場合によっては圧縮が低下することがあります。圧縮が低下する場合は、lc=2もテストしてください。

lp=lp リテラル位置ビット数を指定します。最小値は0で、最大値は4です。デフォルトは0です。

Lpは、リテラルをエンコードするときに、非圧縮データで想定されるアライメントに影響します。詳細については、以下のpbを参照してください。

pb=pb 位置ビット数を指定します。最小値は0で、最大値は4です。デフォルトは2です。

Pbは、非圧縮データで一般的に想定されるアライメントに影響します。 デフォルトでは、4バイトのアライメント(2^pb=2^2=4)となり、より良い推測がない場合は、多くの場合、適切な選択肢となります。

アライメントがわかっている場合は、それに応じてpbを設定することで、ファイルサイズをわずかに削減できる場合があります。たとえば、US-ASCII、ISO-8859-*、UTF-8などの1バイトのアライメントを持つテキストファイルの場合、pb=0を設定すると、わずかに圧縮が改善される可能性があります。UTF-16テキストの場合、pb=1は適切な選択肢です。アライメントが3バイトなどの奇数の場合、pb=0が最適な選択肢となる可能性があります。

pbとlpで想定されるアライメントを調整できますが、LZMA1とLZMA2は依然として16バイトのアライメントをわずかに優先します。LZMA1またはLZMA2で圧縮される可能性が高いファイル形式を設計する場合は、それを考慮する価値があるかもしれません。

mf=mf マッチファインダーは、エンコーダーの速度、メモリ使用量、および圧縮率に大きな影響を与えます。通常、ハッシュチェーンのマッチファインダーは、バイナリツリーのマッチファインダーよりも高速です。 デフォルトは、プリセットによって異なります。0はhc3、1〜3はhc4、残りはbt4を使用します。

次のマッチファインダーがサポートされています。以下のメモリ使用量の式は、dictが2の累乗である場合に最も現実的な近似値です。

hc3 2バイトと3バイトのハッシュを持つハッシュチェーン niceの最小値:3 メモリ使用量: dict * 7.5(dict <= 16 MiBの場合); dict * 5.5 + 64 MiB(dict > 16 MiBの場合)

hc4 2バイト、3バイト、および4バイトのハッシュを持つハッシュチェーン niceの最小値:4 メモリ使用量: dict * 7.5(dict <= 32 MiBの場合); dict * 6.5(dict > 32 MiBの場合)

bt2 2バイトのハッシュを持つバイナリツリー niceの最小値:2 メモリ使用量:dict * 9.5

bt3 2バイトと3バイトのハッシュを持つバイナリツリー niceの最小値:3 メモリ使用量: dict * 11.5(dict <= 16 MiBの場合); dict * 9.5 + 64 MiB(dict > 16 MiBの場合)

bt4 2バイト、3バイト、および4バイトのハッシュを持つバイナリツリー niceの最小値:4 メモリ使用量: dict * 11.5(dict <= 32 MiBの場合); dict * 10.5(dict > 32 MiBの場合)


mode=mode

圧縮モードは、マッチファインダーによって生成されたデータを分析する方法を指定します。サポートされているモードは、fast(高速)とnormal(通常)です。デフォルトは、プリセット0~3の場合はfast、プリセット4~9の場合はnormalです。

通常、fastはハッシュチェーンマッチファインダーで使用され、normalはバイナリツリーマッチファインダーで使用されます。これは、プリセットが行うことでもあります。

nice=nice

マッチとして適切な長さは何であるかを指定します。少なくともniceバイト以上のマッチが見つかると、アルゴリズムはより良いマッチの検索を停止します。

niceは、2~273バイトにすることができます。より高い値を使用すると、圧縮率が向上しますが、速度が低下する傾向があります。デフォルトはプリセットによって異なります。

depth=depth

マッチファインダーにおける最大検索深度を指定します。デフォルトは、特別な値である0であり、これによりコンプレッサーはmfとniceから適切な深度を決定します。

ハッシュチェーンの場合、適切な深度は4~100、バイナリツリーの場合は16~1000です。depthに非常に高い値を設定すると、一部のファイルでエンコーダーが非常に遅くなる可能性があります。1000を超える値を設定する場合は、圧縮に時間がかかりすぎる場合に中断できるようにしてください。

生のストリームをデコードする場合(--format=raw)、LZMA2には辞書サイズのみが必要です。LZMA1には、lc、lp、pbも必要です。

--x86[=options]
--arm[=options]
--armthumb[=options]
--arm64[=options]
--powerpc[=options]
--ia64[=options]
--sparc[=options]
--riscv[=options]

フィルターチェーンに分岐/呼び出し/ジャンプ(BCJ)フィルターを追加します。これらのフィルターは、フィルターチェーンの最後のフィルターとしてのみ使用できます。

BCJフィルターは、マシンコード内の相対アドレスを絶対アドレスに変換します。これにより、データサイズは変更されませんが、冗長性が高まり、LZMA2が0~15%小さい.xzファイルを生成するのに役立ちます。BCJフィルターは常に可逆的であるため、BCJフィルターを誤った種類のデータに使用してもデータ損失は発生しませんが、圧縮率がわずかに低下する可能性があります。BCJフィルターは非常に高速で、ごくわずかなメモリしか使用しません。

これらのBCJフィルターには、圧縮率に関連する既知の問題があります。

実行可能コードを含むファイル(オブジェクトファイル、静的ライブラリ、Linuxカーネルモジュールなど)の一部のアドレスは、命令内のプレースホルダーの値で埋められています。これらのBCJフィルターは、アドレス変換を実行するため、これらのファイルでは圧縮率が低下します。

BCJフィルターをアーカイブに適用すると、BCJフィルターを使用しない場合よりも圧縮率が低下する可能性があります。たとえば、類似または同一の実行可能ファイルがある場合、フィルターを使用するとファイルが類似性が低くなる可能性があり、圧縮率が低下します。アーカイブ内の実行可能ファイル以外のファイルの内容も影響する可能性があります。実際には、BCJフィルターを使用する場合と使用しない場合の両方を試して、それぞれの場合にどちらが優れているかを確認する必要があります。

異なる命令セットは、異なるアライメントを持っています。フィルターを機能させるためには、実行可能ファイルは入力データ内でこの値の倍数にアライメントされている必要があります。


フィルター アライメント 備考 x86 1 32ビットまたは64ビットのx86 ARM 4 ARM-Thumb 2 ARM64 4 4096バイトのアライメントが最適 PowerPC 4 ビッグエンディアンのみ IA-64 16 Itanium SPARC 4 RISC-V 2

BCJフィルタリングされたデータは通常、LZMA2で圧縮されるため、圧縮率をわずかに改善するには、LZMA2オプションを、選択したBCJフィルタのアライメントに合わせて設定できます。例:

IA-64フィルタは16バイトのアライメントを持つため、pb=4、lp=4、lc=0がLZMA2に適しています(2^4=16)。

RISC-Vコードは、ファイルに16ビットの圧縮命令(C拡張)が含まれているかどうかによって、2バイトまたは4バイトのアライメントになります。16ビットの命令が使用されている場合、pb=2、lp=1、lc=3またはpb=1、lp=1、lc=3が適しています。16ビットの命令が含まれていない場合、pb=2、lp=2、lc=2が最適です。readelf -hを使用して、"Flags"行に"RVC"が表示されるかどうかを確認できます。

ARM64は常に4バイトのアライメントであるため、pb=2、lp=2、lc=2が最適です。

x86フィルタは例外です。x86実行ファイルを圧縮する場合は、LZMA2のデフォルト(pb=2、lp=0、lc=3)を使用するのが一般的です。

すべてのBCJフィルタは、同じオプションをサポートします。

start=オフセット
相対アドレスと絶対アドレスを変換するときに使用する開始オフセットを指定します。オフセットは、フィルタのアライメントの倍数である必要があります(上記のテーブルを参照)。デフォルトはゼロです。実際には、デフォルトで問題ありません。カスタムオフセットを指定する必要はほとんどありません。

--delta[=オプション]
Deltaフィルタをフィルタチェーンに追加します。Deltaフィルタは、フィルタチェーンの最後のフィルタとして使用することはできません。

現在、単純なバイト単位のデルタ計算のみがサポートされています。これは、たとえば、非圧縮のビットマップ画像または非圧縮のPCMオーディオを圧縮する場合に役立ちます。ただし、特殊なアルゴリズムは、Delta + LZMA2よりもはるかに優れた結果をもたらす可能性があります。これは、特にオーディオの場合に当てはまります。オーディオは、たとえば、flac(1)を使用して、より高速かつ優れた方法で圧縮できます。

サポートされているオプション:

dist=距離
デルタ計算の距離(バイト単位)を指定します。distanceは1〜256である必要があります。デフォルトは1です。

たとえば、dist=2で、入力A1 B1 A2 B3 A3 B5 A4 B7の場合、出力はA1 B1 01 02 01 02 01 02になります。

その他のオプション

-q、--quiet
警告と通知を抑制します。このオプションを2回指定すると、エラーも抑制されます。ただし、このオプションは終了ステータスに影響しません。つまり、警告が抑制された場合でも、警告を示す終了ステータスは引き続き使用されます。

-v、--verbose
詳細表示します。標準エラーがターミナルに接続されている場合、xzは進行状況インジケーターを表示します。--verboseを2回指定すると、さらに詳細な出力が得られます。

進行状況インジケーターには、次の情報が表示されます。

入力ファイルのサイズがわかっている場合は、完了率が表示されます。つまり、パーセンテージはパイプでは表示できません。

圧縮または解凍中に生成される圧縮データの量。

圧縮または解凍中に消費される非圧縮データの量。

圧縮率は、これまでに処理された圧縮データ量を処理された非圧縮データ量で割って計算されます。

圧縮または解凍速度。これは、圧縮の場合の消費された非圧縮データ量または解凍の場合の生成された非圧縮データ量、1秒あたりで測定されます。これは、xzがファイルの処理を開始してから数秒が経過した後に表示されます。

経過時間は、M:SSまたはH:MM:SSの形式で表示されます。

推定残りの時間は、入力ファイルのサイズがわかっており、xzがファイルの処理を開始してから数秒が経過した場合にのみ表示されます。時間は、コロンを含まない、たとえば「2分30秒」のような、より不正確な形式で表示されます。

標準エラーがターミナルでない場合、--verboseオプションを指定すると、xzはファイル名、圧縮サイズ、非圧縮サイズ、圧縮率、および場合によっては速度と経過時間を、圧縮または解凍後に標準エラーに1行で出力します。速度と経過時間は、操作に数秒以上かかった場合にのみ含まれます。操作が完了しなかった場合(ユーザーによる中断など)、入力ファイルのサイズがわかっている場合は、完了率も出力されます。

-Q、--no-warn
警告に値する条件が検出された場合でも、終了ステータスを2に設定しません。このオプションは、冗長性レベルに影響しないため、警告を表示しないようにするには、--quietと--no-warnの両方を指定する必要があります。

--robot
メッセージを機械的に解析しやすい形式で出力します。これは、さまざまなスクリプトでliblzmaの代わりにxzを使用できるようにすることを目的としています。このオプションを有効にすると、出力はxzのリリース間で安定するように設計されています。ROBOT MODEセクションを参照してください。

--info-memory
システムが持つ物理メモリ(RAM)とプロセッサスレッドの数、および圧縮と解凍のメモリ使用量制限を、人間が読みやすい形式で表示し、正常に終了します。

-h、--help
最も一般的に使用されるオプションについて説明するヘルプメッセージを表示し、正常に終了します。

-H、--long-help
xzのすべての機能について説明するヘルプメッセージを表示し、正常に終了します。

-V、--version
xzとliblzmaのバージョン番号を人間が読みやすい形式で表示します。機械的に解析可能な出力を取得するには、--versionの前に--robotを指定します。

ROBOT MODE

ロボットモードは、--robotオプションで有効にします。これにより、xzの出力が他のプログラムによって解析しやすくなります。現在、--robotは--list、--filters-help、--info-memory、および--versionとともにのみサポートされています。将来的には、圧縮と解凍でもサポートされる予定です。

リストモード

xz --robot --listは、タブ区切りの出力を使用します。各行の最初の列には、その行にある情報の種類を示す文字列が含まれます。

name   これはファイルリストを開始するときに常に最初の行です。この行の2番目の列はファイル名です。

file   この行には、.xzファイルに関する全体的な情報が含まれています。この行は、name行の直後に常に表示されます。

stream この行タイプは、--verboseが指定された場合にのみ使用されます。stream行の数は、.xzファイル内のストリームの数と同じです。

block この行タイプは、--verboseが2回指定された場合にのみ使用されます。block行の数は、.xzファイル内のブロックの数と同じです。block行は、すべてのstream行の後に表示されます。異なる行タイプは相互に交差しません。

summary

この行タイプは、--verboseが2回指定された場合にのみ使用されます。この行は、すべてのblock行の後に表示されます。file行と同様に、summary行には.xzファイルに関する全体的な情報が含まれています。

totals これは、リスト出力の最後の行です。合計の数とサイズが表示されます。

file行の列: ### ファイル内のストリームの数 ### ストリーム内のブロックの総数 ### 圧縮されたファイルのサイズ ### 圧縮解除されたファイルのサイズ ### 圧縮率。たとえば、0.123など。圧縮率が9.999を超える場合、代わりに3つのハイフン(---)が表示されます。 ### 整合性チェック名のカンマ区切りのリスト。既知のチェックタイプには、None、CRC32、CRC64、およびSHA-256という文字列が使用されます。不明なチェックタイプの場合、Unknown-Nが使用されます。ここで、NはチェックIDの10進数(1桁または2桁)です。 ### ファイル内のストリームパディングの合計サイズ

stream行の列: ### ストリーム番号(最初のストリームは1) ### ストリーム内のブロックの数 ### 圧縮された開始オフセット ### 圧縮解除された開始オフセット ### 圧縮されたサイズ(ストリームパディングは含まれません) ### 圧縮解除されたサイズ ### 圧縮率 ### 整合性チェックの名前 ストリームパディングのサイズ

block行の列: ### このブロックを含むストリームの番号 ### ストリームの先頭からのブロック番号(最初のブロックは1) ### ファイルの先頭からのブロック番号 ### ファイルの先頭からの圧縮された開始オフセット ### ファイルの先頭からの圧縮解除された開始オフセット ### ブロックの合計圧縮サイズ(ヘッダーが含まれます) ### 圧縮解除されたサイズ ### 圧縮率 整合性チェックの名前

--verboseが2回指定された場合、block行に追加の列が含まれます。これは、単一の--verboseでは表示されません。これは、この情報を取得するには多くのシークが必要であり、そのため時間がかかる可能性があるためです。
    16進数での整合性チェックの値
    ブロックヘッダーのサイズ
    ブロックフラグ:cは圧縮サイズが存在することを示し、uは圧縮解除サイズが存在することを示します。フラグが設定されていない場合、文字列の長さを一定にするために、代わりにハイフン(-)が表示されます。将来、フラグの末尾に追加のフラグが追加される場合があります。
    ブロックの実際の圧縮データのサイズ(これには、ブロックヘッダー、ブロックパディング、およびチェックフィールドは含まれません)
    このxzバージョンでこのブロックを圧縮解除するために必要なメモリ量(バイト単位)
    フィルターチェーン。ただし、圧縮時に使用されたほとんどのオプションはわからなくなります。これは、圧縮解除に必要なオプションのみが.xzヘッダーに保存されるためです。

サマリー行の列: ### このファイルに対してこの xz バージョンで解凍するために必要なメモリ量(バイト単位) すべてのブロックヘッダーに、圧縮サイズと解凍サイズの両方が格納されているかどうかを示す(はい/いいえ) xz 5.1.2alpha 以降: ### ファイルを解凍するために必要な最小の xz バージョン

合計行の列: ### ストリームの数 ### ブロックの数 ### 圧縮サイズ ### 解凍サイズ ### 平均圧縮率 ### ファイルに含まれていた整合性チェックの名前のカンマ区切りリスト ### ストリームパディングサイズ ### ファイル数。これは、以前の列の順序を維持するためにここにあります。

--verbose が 2 回指定された場合、合計行に次の列が追加されます。 この xz バージョンでファイルを解凍するために必要な最大メモリ量(バイト単位) すべてのブロックヘッダーに、圧縮サイズと解凍サイズの両方が格納されているかどうかを示す(はい/いいえ) xz 5.1.2alpha 以降: ファイルを解凍するために必要な最小の xz バージョン

今後のバージョンでは、新しい種類の行が追加され、既存の行の種類に新しい列が追加される可能性がありますが、既存の列は変更されません。

フィルターヘルプ

xz --robot --filters-help は、サポートされているフィルターを次の形式で出力します。

フィルター:オプション=<値>,オプション=<値>...

フィルター フィルターの名前

オプション フィルター固有のオプションの名前

値 数値範囲は <最小-最大> のように表示されます。文字列値の選択肢は、< > で囲み、| 記号で区切ります。

各フィルターは、それぞれ別の行に出力されます。

### メモリ制限情報
xz --robot --info-memory は、複数のタブ区切り列を持つ 1 行を出力します。

###          合計の物理メモリ量(RAM)(バイト単位)。

###          圧縮のメモリ使用量制限(バイト単位)(--memlimit-compress)。特別な値 0 は、デフォルト設定を示します。これは、シングルスレッドモードでは制限がないのと同じです。

###          解凍のメモリ使用量制限(バイト単位)(--memlimit-decompress)。特別な値 0 は、デフォルト設定を示します。これは、シングルスレッドモードでは制限がないのと同じです。

###          xz 5.3.4alpha 以降:マルチスレッド解凍のメモリ使用量(バイト単位)(--memlimit-mt-decompress)。これは決して 0 になりません。これは、制限が明示的に指定されていない場合に、システム固有のデフォルト値(列 5 に表示)が使用されるためです。これはまた、列 3 の値よりも大きくすることはできません。たとえ、--memlimit-mt-decompress でより大きな値が指定された場合でも。

###         xz 5.3.4alpha 以降:システム固有のデフォルトのメモリ使用量制限。これは、自動スレッド数 (--threads=0) で圧縮し、メモリ使用量制限 (--memlimit-compress) が指定されていない場合に、スレッド数を制限するために使用されます。また、--memlimit-mt-decompress のデフォルト値としても使用されます。

###         xz 5.3.4alpha 以降:利用可能なプロセッサースレッドの数。

将来、xz --robot --info-memory の出力には、さらに多くの列が表示される可能性がありますが、常に 1 行に制限されます。

バージョン

xz --robot --version は、xz と liblzma のバージョン番号を次の形式で出力します。

XZ_VERSION=XYYYZZZS
LIBLZMA_VERSION=XYYYZZZS

X      メジャーバージョン。

YYY    マイナーバージョン。偶数番号は安定版、奇数番号はアルファ版またはベータ版です。

ZZZ    安定版の場合はパッチレベル、開発版の場合は単なるカウンター。

S      安定度。0 はアルファ版、1 はベータ版、2 は安定版です。YYY が偶数の場合は、S は常に 2 である必要があります。

XYYYZZZS は、xz と liblzma が同じ XZ Utils リリースから取得された場合、両方の行で同じになります。

例:4.999.9beta は 49990091、5.0.0 は 50000002 です。

終了ステータス

0     すべて正常。

1     エラーが発生しました。

2     警告に値する事象が発生しましたが、実際のエラーは発生しませんでした。

標準エラーに出力される通知(警告やエラーではない)は、終了ステータスに影響しません。

環境

xz は、コマンドラインからオプションを解析する前に、環境変数 XZ_DEFAULTS と XZ_OPT からスペースで区切られたオプションのリストを解析します。ただし、環境変数からはオプションのみが解析され、オプション以外のものはすべて無視されます。解析は getopt_long(3) を使用して行われ、これはコマンドライン引数にも使用されます。

警告:これらの環境変数を設定すると、xz を実行するプログラムやスクリプトが変更されることになります。ほとんどの場合、メモリ使用量制限、スレッド数、および圧縮オプションを環境変数を使用して設定しても問題ありません。ただし、一部のオプションはスクリプトを中断させる可能性があります。明らかな例は、--help です。これを設定すると、xz はファイルを圧縮または解凍する代わりに、ヘルプテキストを表示します。より微妙な例としては、--quiet と --verbose があります。多くの場合、--verbose を使用して進行状況インジケータを有効にすると問題ありませんが、状況によっては追加のメッセージが問題を引き起こすことがあります。冗長性レベルも、--list の動作に影響を与えます。

XZ_DEFAULTS

ユーザー固有またはシステム全体のデフォルトオプション。通常、これはシェル初期化スクリプトで設定され、xz のメモリ使用量制限をデフォルトで有効にするか、デフォルトのスレッド数を設定します。シェル初期化スクリプトやその他の特殊なケースを除き、スクリプトは XZ_DEFAULTS を設定または解除すべきではありません。

XZ_OPT

xz コマンドラインでオプションを直接設定できない場合に、オプションを xz に渡すために使用します。これは、xz がスクリプトまたはツールによって実行される場合です。例:GNU tar(1)。


XZ_OPT=-2v tar caf foo.tar.xz foo

スクリプトは、たとえば、スクリプト固有のデフォルトの圧縮オプションを設定するために、XZ_OPTを使用できます。ただし、ユーザーがXZ_OPTをオーバーライドできるようにすることをお勧めします。たとえば、sh(1)スクリプトでは、次のようなコードを使用できます。

XZ_OPT=${XZ_OPT-"-7e"}
export XZ_OPT

LZMAユーティリティとの互換性

^ zのコマンドライン構文は、LZMA Utils 4.32.xで見られるlzmaunlzma、およびlzcatのほぼスーパーセットです。ほとんどの場合、LZMA UtilsをXZ Utilsに置き換えても、既存のスクリプトは中断しません。ただし、いくつかの非互換性があり、問題が発生する場合があります。

圧縮プリセットレベル

^ zとLZMA Utilsでは、圧縮レベルプリセットの番号付けが異なります。最も重要な違いは、辞書サイズが異なるプリセットにどのようにマップされるかです。辞書サイズは、おおよそデコンプレッサーのメモリ使用量に相当します。

レベル xz LZMA Utils -0 256 KiB N/A -1 1 MiB 64 KiB -2 2 MiB 1 MiB -3 4 MiB 512 KiB -4 4 MiB 1 MiB -5 8 MiB 2 MiB -6 8 MiB 4 MiB -7 16 MiB 8 MiB -8 32 MiB 16 MiB -9 64 MiB 32 MiB

辞書サイズの差は、コンプレッサーのメモリ使用量にも影響しますが、LZMA UtilsとXZ Utilsの間には他の違いもあり、その違いにより差がさらに大きくなります。

レベル xz LZMA Utils 4.32.x -0 3 MiB N/A -1 9 MiB 2 MiB -2 17 MiB 12 MiB -3 32 MiB 12 MiB -4 48 MiB 16 MiB -5 94 MiB 26 MiB -6 94 MiB 45 MiB -7 186 MiB 83 MiB -8 370 MiB 159 MiB -9 674 MiB 311 MiB

LZMA Utilsのデフォルトのプリセットレベルは-7ですが、XZ Utilsでは-6であり、どちらもデフォルトで8MiBの辞書を使用します。

ストリーミングと非ストリーミングの.lzmaファイル

ファイルが解凍される前のサイズは、.lzmaヘッダーに保存できます。LZMA Utilsは、通常のファイルを圧縮するときにこれを行います。もう1つの方法は、解凍される前のサイズが不明であることを示し、ペイロードの終端マーカーを使用して、デコンプレッサーが停止する場所を示すことです。LZMA Utilsは、解凍される前のサイズが不明な場合(たとえば、パイプの場合)に、この方法を使用します。

^ zは、ペイロードの終端マーカーの有無にかかわらず、.lzmaファイルを解凍できますが、xzによって作成されるすべての.lzmaファイルは、ペイロードの終端マーカーを使用し、.lzmaヘッダーに解凍される前のサイズが不明としてマークされます。これは、まれな状況では問題になる可能性があります。たとえば、組み込みデバイスの.lzmaデコンプレッサーは、解凍される前のサイズが既知のファイルでのみ動作する場合があります。この問題が発生した場合は、LZMA UtilsまたはLZMA SDKを使用して、解凍される前のサイズが既知の.lzmaファイルを作成する必要があります。


サポートされていない .lzma ファイル

.lzma 形式では、lc 値は最大 8、lp 値は最大 4 までです。LZMA Utils は、任意の lc および lp 値を持つファイルを解凍できますが、常に lc=3 および lp=0 でファイルを作成します。他の lc および lp 値を持つファイルの作成は、xz および LZMA SDK を使用することで可能です。

liblzma 内の LZMA1 フィルターの実装では、lc と lp の合計が 4 を超えてはなりません。したがって、この制限を超える .lzma ファイルは、xz で解凍できません。

LZMA Utils は、辞書サイズが 2^n (2 の累乗) の .lzma ファイルのみを作成しますが、任意の辞書サイズのファイルを受け入れます。liblzma は、辞書サイズが 2^n または 2^n + 2^(n-1) の .lzma ファイルのみを受け入れます。これは、.lzma ファイルを検出する際に誤検出を減らすためです。

これらの制限は、実際には問題ないはずです。なぜなら、実質的にすべての .lzma ファイルは、liblzma が受け入れる設定で圧縮されているからです。

終端の不要なデータ

解凍時に、LZMA Utils は最初の .lzma ストリーム以降のすべてのデータを無視します。ほとんどの場合、これはバグです。また、これは LZMA Utils が連結された .lzma ファイルを解凍できないことを意味します。

最初の .lzma ストリームの後にデータが残っている場合、xz は --single-stream が使用されていない限り、ファイルを破損していると見なします。これにより、終端の不要なデータを無視するという前提に基づいて作成された、まれなスクリプトが動作しなくなる可能性があります。

注意事項

圧縮された出力は異なる場合があります

同じ非圧縮入力ファイルから生成される正確な圧縮出力は、圧縮オプションが同じであっても、XZ Utils のバージョン間で異なる場合があります。これは、エンコーダーがファイル形式に影響を与えずに改善 (高速化またはより良い圧縮) できるためです。出力は、同じ XZ Utils バージョンの異なるビルドでも、異なるビルドオプションが使用されている場合に異なる場合があります。

上記は、--rsyncable が実装された場合、結果として得られるファイルが、両方の古いファイルと新しいファイルが同じ xz バージョンで圧縮されていない限り、必ずしも rsync 可能ではないことを意味します。この問題は、エンコーダーの実装の一部を固定して、rsync 可能な出力を xz バージョン間で安定させることで修正できます。

組み込みの .xz 解凍プログラム

XZ Embedded のような組み込みの .xz 解凍プログラムの実装は、必ずしも integrity check type が none および crc32 以外のファイルに対応しているわけではありません。デフォルトは --check=crc64 であるため、組み込みシステムで使用する場合は、--check=none または --check=crc32 を使用する必要があります。

組み込みシステム以外のすべての .xz 形式の解凍プログラムは、すべてのチェックタイプをサポートするか、少なくとも特定のチェックがサポートされていない場合でも、整合性チェックを実行せずにファイルを解凍できます。

XZ Embedded は BCJ フィルターをサポートしますが、デフォルトの開始オフセットでのみサポートされます。

基本

ファイル foo をデフォルトの圧縮レベル (-6) で foo.xz に圧縮し、圧縮に成功した場合は foo を削除します。

xz foo

ファイル bar.xz を bar に解凍し、解凍に成功した場合でも bar.xz を削除しません。


xz -dk bar.xz

「-4e」プリセット(-4 --extreme)を使用して、baz.tar.xzを作成します。これはデフォルトの-6よりも遅くなりますが、圧縮と解凍に必要なメモリが少なくなります(それぞれ48MiBと5MiB)。

tar cf - baz | xz -4e > baz.tar.xz

圧縮ファイルと非圧縮ファイルの組み合わせを標準出力に解凍するには、次のコマンドを使用します。

xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt

複数のファイルの並列圧縮

GNUおよびBSDでは、find(1)とxargs(1)を使用して、多数のファイルの圧縮を並列化できます。

find . -type f \! -name '*.xz' -print0 \
| xargs -0r -P4 -n16 xz -T1

xargs(1)の-Pオプションは、並列xzプロセスの数を設定します。-nオプションの最適な値は、圧縮するファイルの数によって異なります。ファイルが数個しかない場合は、値は1である必要があります。数万個のファイルがある場合は、100またはそれ以上の値が適切であり、xargs(1)が最終的に作成するxzプロセスの数を減らすことができます。

xzの-T1オプションは、xargs(1)を使用して並列化の量を制御するため、xzをシングルスレッドモードに強制するために使用されます。

ロボットモード

複数のファイルを圧縮した後に合計で節約されたバイト数を計算します。

xz --robot --list *.xz | awk '/^totals/{print $5-$4}'

スクリプトが、xzのバージョンが十分に新しくないかどうかを確認したい場合があります。次のsh(1)スクリプトは、xzツールのバージョン番号が少なくとも5.0.0であることを確認します。この方法は、--robotオプションをサポートしていない古いベータバージョンでも互換性があります。

if ! eval "$(xz --robot --version 2> /dev/null)" ||
[ "$XZ_VERSION" -lt 50000002 ]; then
echo "Your xz is too old."
fi
unset XZ_VERSION LIBLZMA_VERSION

XZ_OPTを使用して、解凍のメモリ使用量に制限を設定しますが、すでに制限が設定されている場合は、それを増やさないでください。

NEWLIM=$((123 << 20))  # 123 MiB
OLDLIM=$(xz --robot --info-memory | cut -f3)
if [ $OLDLIM -eq 0 -o $OLDLIM -gt $NEWLIM ]; then
XZ_OPT="$XZ_OPT --memlimit-decompress=$NEWLIM"
export XZ_OPT
fi

カスタムコンプレッサーフィルターチェーン

カスタムフィルターチェーンの最も簡単な用途は、LZMA2プリセットをカスタマイズすることです。これは役立つ場合があります。なぜなら、プリセットは、潜在的に有用な圧縮設定の組み合わせの一部をカバーしているだけだからです。

オプション-0 ... -9および--extremeの説明のテーブルのCompCPU列は、LZMA2プリセットをカスタマイズする場合に役立ちます。関連する部分を次の2つのテーブルから収集しました。

Preset CompCPU -0 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -5e 7 -6e 8

ファイルが適切に圧縮されるためには、比較的大きな辞書(たとえば、32MiB)が必要であり、xz -8よりも高速に圧縮したい場合は、低いCompCPU値(たとえば、1)を持つプリセットを修正して、より大きな辞書を使用できます。

xz --lzma2=preset=1,dict=32MiB foo.tar

特定のファイルでは、上記のコマンドは xz -6 よりも高速に圧縮でき、かつ圧縮率も向上する場合があります。ただし、大きな辞書から恩恵を受け、CompCPU 値を低く保つことができるのは一部のファイルに限られることに注意してください。大きな辞書が役立つ最も明白な状況は、サイズが数メガバイト以上の非常に類似したファイルを含むアーカイブです。LZMA2が連続するファイル間の類似性を最大限に活用できるように、辞書のサイズは個々のファイルよりも大幅に大きくする必要があります。

圧縮側と解凍側のメモリ使用量が非常に大きくても問題なく、圧縮するファイルが少なくとも数百メガバイト以上の場合、xz -9 が使用する 64MiB よりもさらに大きな辞書を使用すると役立つことがあります。

xz -vv --lzma2=dict=192MiB big_foo.tar

上記の例のように、-vv (--verbose --verbose) オプションを使用すると、圧縮側と解凍側のメモリ要件を確認するのに役立ちます。辞書のサイズが非圧縮ファイルのサイズよりも大きい場合、メモリが無駄になるため、上記のコマンドは小さいファイルには役に立ちません。

圧縮時間は重要ではなく、解凍側のメモリ使用量をできるだけ少なく抑えたい場合もあります。たとえば、組み込みシステムでファイルを解凍できるようにするためです。次のコマンドは、-6e (-6 --extreme) をベースとして使用し、辞書を 64KiB に設定します。結果のファイルは、XZ Embedded を使用して約 100KiB のメモリで解凍できます。

xz --check=crc32 --lzma2=preset=6e,dict=64KiB foo

可能な限り多くのバイトを削減したい場合は、リテラルコンテキストビット数 (lc) と位置ビット数 (pb) を調整すると、圧縮率が向上する場合があります。リテラル位置ビット数 (lp) を調整しても役立つ場合がありますが、通常は lcpb の方が重要です。たとえば、ソースコードアーカイブには主に US-ASCII テキストが含まれているため、次のコマンドを使用すると、xz -6e よりもわずかに (約 0.1%) 小さいファイルを作成できる場合があります (また、lc=4 を指定せずに試してみてください)。

xz --lzma2=preset=6e,pb=0,lc=4 source_code.tar

別のフィルターを LZMA2 と組み合わせて使用すると、特定の種類のファイルで圧縮率を向上させることができます。たとえば、x86-32 または x86-64 共有ライブラリを x86 BCJ フィルターを使用して圧縮するには、次のコマンドを使用します。

xz --x86 --lzma2 libfoo.so

フィルターオプションの順序が重要であることに注意してください。--x86--lzma2 の後で指定すると、xz はエラーを返します。LZMA2 の後にはフィルターを配置できず、x86 BCJ フィルターをフィルターチェーンの最後に使用することもできないためです。

Delta フィルターを LZMA2 と組み合わせて使用すると、ビットマップ画像で良好な結果が得られます。通常、これは PNG よりも優れており、PNG には、単純なデルタよりも高度なフィルターがいくつか含まれていますが、実際の圧縮には Deflate を使用します。

画像は、非圧縮形式で保存する必要があります。たとえば、非圧縮 TIFF 形式で保存します。Delta フィルターの距離パラメーターは、画像内の 1 ピクセルあたりのバイト数と一致するように設定します。たとえば、24 ビット RGB ビットマップには dist=3 が必要であり、LZMA2 に pb=0 を渡して、3 バイトのアライメントに対応させることもできます。


xz --delta=dist=3 --lzma2=pb=0 foo.tiff

複数の画像が単一のアーカイブ(たとえば、.tar)に格納されている場合でも、すべての画像が同じピクセルあたりのバイト数を持つ限り、Deltaフィルターはそれらに対しても機能します。

関連項目

xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), bzip2(1), 7z(1)

XZ Utils: [https://tukaani.org/xz/]
XZ Embedded: [https://tukaani.org/xz/embedded.html]
LZMA SDK: [https://7-zip.org/sdk.html]