7 Zipを使用してファイルを圧縮するときに使用する最適なオプションは何ですか?


62

多くの場合、ログファイルを収集して中央サーバー(別の会社が所有)にアップロードする必要があります。中央サーバーにはファイルのサイズ制限があるため、zip形式のままで可能な限り最小のファイルを作成しようとしています。

必要なファイルサイズが小さい場合にテキストファイルをzip形式に圧縮するときに使用する最適な設定は何ですか?

7zipオプション

明らかな超圧縮を選択し、LZMAがデフレートよりも優れていることに気付きましたが、すべてをテストするには他のオプションの組み合わせが多すぎます。


1
zipを複数のファイルに分割するオプションはありますか?
JaredMcAteer

3
Deflate形式以外を選択するとすぐに、それはもう「通常の」.zipファイルではなく、WinZipによって開拓された「拡張」zipファイルです。当初、拡張子は.zipであり、多くの驚異的でした(ほとんどの通常のzip処理ツールはそれらを処理できないため)が、ほとんどのアーカイバは従来の.zipファイルと区別するために.zipxを使用します。LZMAを使用できる場合は、.7zに切り替えてPPMdを選択します。これにより、テキストファイルの圧縮率が向上します(高速になります)。
フレイジャー

1
@afrazier:「.ZIPファイル形式の仕様には、次の圧縮方法が記載されています。stored(圧縮なし)、Shrunk、Reduced(方法1〜4)、Improded、Tokenizing、Deflated、Deflate64、bzip2、LZMA(EFS)、WavPack、PPMd 」en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
endolith

1
@endolith:bzip2、lzma、wv、およびppmdはすべて、ファイル形式へのごく最近の追加です。受信者がdeflate64を処理できると想定するのは安全ではありません。
フレイジャー

1
「通常のzipツール」を定義します。最近の7zやwinrarのような「通常のzipツール」は、7zファイルを抽出できます。
phuclv

回答:


61

7-Zipが作成できる最小の標準ZIPファイルを作成するには、次を試してください。

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

出典:最適な標準ZIP圧縮を実現するにはどうすればよいですか?

それ以外の場合、ZIP標準を気にしない場合は、次のウルトラ設定を使用します。

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

どちらが:

-t7z   7z archive

-m0=lzma
       lzma method

-mx=9  level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on

2
@Tek:なぜですか?それは良いものではありません。質問は「標準のZIP形式」を使用することでしたので、答えはLZMAを指定するべきではありません。-ms = onは.7z用であり、標準のzipファイルではありません。-mdはBZip2に関連しているため、ZIP(またはLZMA)に影響を与えるとは思わない。-mfb = 64は最適化されていない値です。-mfb= 258は、zipファイルを小さくします。この回答では、zipファイルに影響を与える可能性のある-mpass = 15についても言及していません。これはうまくフォーマットされた回答であり、残念ながら複数の点で間違っています。
TOOGAM

6
lzma2を使用します
ランスバジャー

7-zip FAQを見ると、状況によっては、新しいバージョンの7zが古いバージョンよりもパフォーマンスが低下する可能性があることが記載されています。詳細についてはFAQを参照してください。ただし、簡単に言うと、GUIのパラメーターフィールドで「qs」を使用するか、コマンドラインバージョンで-mqsを使用して、ファイル拡張子による古いソート方法を使用します。7-zip.org/faq.html
drojf

13

.zipではなく.7z形式を使用できる場合は、次のオプションを指定してPPMDを使用し、その他はすべて圧縮レベルで設定されたままにします。

  • アーカイブ形式:7z
  • 圧縮方法:PPMD
  • 圧縮レベル:ウルトラ

これらのオプションを使用してサーバー/テキストログ(60MB以上)を定期的に圧縮しますが、通常は元のサイズの1〜2%で出力されます。


ログファイルなどのテキストの場合、ppmdが間違いなく道です。ただし、質問では、zip形式のままにする必要があり、PPMDでは機能しない可能性があると述べています。
ブライアンミントン

ただ、PPMDとジッパーを試してみましたが、Windowsのエクスプローラでは、Windows 7上で、ここで文句なしの内容までを開く
アンバーフェルール

3
私もそれに気づきました。内容がうまく開きます。ただし、zipファイル内のファイルの1つを実際に表示しようとすると、失敗しました。
ブライアンミントン

2
なぜPPMDはテキストファイルの優れた圧縮方法ですか?
user598527

1
LZMA2は、PPMDよりもテキストファイルに対して優れた結果を提供します。
T3rm1

7

Ubuntuサーバー14.04.03とVM上のp7zip [64] 9.20のdb.fdb 1.2 GB(1236598784 B)を比較します。

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

その結果があります:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

2番目の方法はうまく機能すると思います=(ほぼ)最高の時間で最高の圧縮を行います。しかし、最良の「表示」と覚えやすいのは、小さなファイルで最大圧縮のポイントがない最初の方法です。2と3の方法の間では、余分な7zは小さくなりませんが、圧縮のためにほぼ2倍の時間を費やします。誰でも自分で決めます。


7

多くの実験を経て、詳細な7zipドキュメントを掘り下げ、高度なLZMA2パラメーターに関する7zソースコードの一部を読んだ後、以下のより良い方法があります。これは、ここまたは7zのマンページに投稿された以前に受け入れられていたソリューションよりも2〜4倍以上、いくつかの1GBの実際のテストファイルを削減しました。

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

ここではLZMA2圧縮が想定されていますが、、-m0=LZMA2:27またはなどの高度なLZMA2オプション、または次のような-m0=LZMA2:d25パラメーターの配列を渡すことで、7zipでさらに優れたパフォーマンスを得ることができる場合があります

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

このようなパラメーターは、私がテストした7zバージョンでは尊重されていないようですが、さらに詳しく調べるか、7zコードを修正して適切に解析することができます。または、動作するはずで、テストされたビルドで壊れているだけかもしれません。


うわー、これは本当に大きな違いをもたらしました。私のアーカイブでは、ここでの他の回答を含む、他の多くの提案を試してみましたが、これらの設定を使用した場合の最高の結果は85MBでしたが、99MBでした。
user9399

0

「ボリュームに分割、バイト」フィールドをサーバーの最大許容ファイルサイズに設定します(バイト単位、「KB」や「MB」などの一般的な略語を受け入れるように見えますが)。zipファイルがそのサイズを超える場合、7-zipはintegration_serviceLog.zip.001integration_serviceLog.zip.002などのように、複数のファイルに自動的に分割します(PK Zipがこれを使用して複数のzipファイルにまたがった場合フロッピーディスク。)それらを解凍するには、すべてのファイルが存在する必要があります。特定のファイルセットに使用する絶対的な最適な圧縮設定を心配する代わりに、1つのファイルに最適なものが別のファイルに異なる場合があるため、これを使用する必要があります。ログをコピーします。


1
反対側の人々がどのようにファイルを解凍するのか心配です。できる限りシンプルにする必要があります。組み込みのWindows zipまたはgzipを使用して分割ボリュームを解凍できるかどうかを知っていますか?
jjnguy

どうやら、いいえ、組み込みのWindows zipフォルダー機能は、スパンされたzipファイルを実行しません。Windows 3より前の形式の標準機能であるため、これは非常に残念です。WinZipは間違いなくできます。
ロブ・ケネディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.