ファイルを圧縮するためのアーカイブ形式の最適な選択を評価するにはどうすればよいですか?


24

一般的に、私は次のことを観察しました:

  • Linux-yファイルまたはツールは、アーカイブの配布にbzip2またはgzipを使用します
  • Windows-yファイルまたはツールは、アーカイブの配布にZIPを使用します
  • 多くの人が独自のアーカイブの作成と配布に7-Zipを使用しています

質問:

  • これらの形式の長所と短所は何ですか?それらはすべてオープン形式のように見えますか?いつ/なぜ別のもの(たとえば、ZIP)よりも1つ(たとえば、7-Zip)を選択する必要がありますか?
  • これらのすべてが移植可能な形式であるにもかかわらず、なぜ上記の傾向が維持されるように見えるのですか?特定のプラットフォームで特定のアーカイブ形式を使用することに特別な利点はありますか?



@ Sathya、@ Andreas:リンクのおかげで、リンクは役に立ち、私の質問の一部に答えます。:)
Mehrdad

1
圧縮は非常に複雑なフィールドであり、すべてのアルゴリズムに対して最適な結果を生成できるアルゴリズムはありません。さらに、リソースを投入してより良い結果を得ることができるという問題がありますが、ほとんど同じ時間で実行できる問題もあります。一部のアルゴリズムは高速でメモリの軽量化に焦点を当てており、一部のアルゴリズムは、所要時間や12GB RAM(誇張ではない)が必要かどうかに関係なく、可能な限り小さいファイルの生成に焦点を当てています。
-Phoshi

1
@Phoshi、これが答えです。
イッツチャック

回答:


16

さまざまな圧縮形式と方法が利用できますが、一部はまったく圧縮せず、1つのアーカイブに多数のファイルを保存するように設計されています。他の新しい実験的コンプレッサー(PAQベース)は、可能な限り積極的に圧縮するように設計されています。その操作を実行するのにかかる時間に関係なく。

圧縮方法の選択から必要な機能を評価し、それが使用されるコンテキストを考慮する必要があります。

さまざまな機能と考慮事項は次のとおりです。

  • 圧縮機能 -ファイルを十分に圧縮しますか?
  • 使いやすさ -ファイルが別のユーザーに送信される場合、アーカイブを簡単に抽出できますか、またはインストールするソフトウェアがさらに必要ですか?
  • パスワード保護および/または暗号化 -これらのセキュリティ対策は必要ですか?
  • 複数ボリュームのサポート -ターゲットメディアでファイルを適切なチャンクに分割する必要がある場合、フォーマットはこれをエレガントにサポートします。たとえば、CDの場合は650 MB。
  • 修復と回復 -ファイルが部分的に破損した場合、データの復元を支援する回復記録を提供しますか?
  • Unicodeサポート -アーカイバは国際的なファイル名または標準のASCIIのみをサポートしていますか?
  • システム要件-7-Zipなどの最新のコンプレッサーは、より大きな辞書を使用して圧縮効率を向上させる機能を提供します(辞書は、圧縮ファイル内の一般的に繰り返されるデータの参照です)が、これにより、圧縮とメモリ消費の両方が増加します減圧時間。
  • 自己抽出のサポート -アーカイブを実行する必要がある人に使いやすくする実行可能ファイルにアーカイブを展開できますか?(また、単一のプラットフォームに対してのみ自己解凍機能を作成できることに留意してください。一般的に、Windows自己解凍機能は、Wineなどの互換性レイヤーを実行しない限り、Linuxではデフォルトで動作しません)。
  • ファイルシステムの属性 -コンプレッサーは、抽出の時点で保存する価値がある関連するファイルシステムのメタデータと権限を保存しますか?

一般的に、ZIPは最も一般的な形式ですが、4 GBを超えるサイズは一般的にサポートされていません(まったくサポートされていない)。一般に、商用のZIPソフトウェアベンダーによる形式の非公式な派生物として実装されています)。

それとは別に、他のほとんどの一般的な形式は、より多くのソフトウェアをインストールすることにより、すべてのオペレーティングシステムで何らかの形でサポートされます。

私の個人的な選択は7-Zipで、これは優れた柔軟性のある圧縮です。Windowsに独特のユーザーインターフェイスがあるにもかかわらず。LinuxおよびMac OS X用の解凍プログラムがあります(ただし、GUIベースは標準ではありません)。


3
アーカイブが配布を目的としている場合、ターゲットオーディエンスを検討し、プラットフォームでデフォルトでサポートされている形式を使用することも重要です。この場合、アクセシビリティは他の考慮事項よりも重要です。
ハンマー

+1情報に感謝しますが、どの形式がそれらの箇条書きをサポートするかについて言及することはさらに良いでしょう。:)
Mehrdad

私は誘惑されましたが、利用可能なフォーマットが多数あるため、リストするのに時間がかかります。ウィキペディアには、役立つ圧縮形式の優れた機能マトリックスがあります。en.wikipedia.org
wiki

1
履歴は、自己解凍アーカイブファイルに関して重要な教訓を教えてくれます。 マシンがMS / PC-DOSプログラムを実行できないため、またはプロセッサの変更の結果として自己解凍プログラムがクラッシュするため、または自己解凍プログラムがクラッシュするため、20年前から自己解凍アーカイブがあります。抽出は...彼らは、ディスクが大きくなることを期待していないので、そうでないときディスクがいっぱいであることを不平を言う、または
JdeBP

その点は確かに議論の余地があり、その特定の問題に遭遇したことはありませんが、発生しているのを見ることができます。アーカイブを作成するという最終目標と、使用するファイルの予想される寿命の問題だと思います。確かに、DOS時代から抽出するのが難しい古いアーカイブがある場合は、DOSBoxを使用するか、必要に応じてVMを作成することもできます。
Ruairi Fullam

8

思い浮かぶことの1つは、Jeff Atwoodによる(2年前の)ブログ投稿です。マルチコア時代のファイル圧縮です。その記事では、3つ以上のコアを実行している場合、bzip2は7-zipよりも優れていることがわかりました。


+1 omg!知りませんでした。ただし、圧縮率には価値がないようです。:)
Mehrdad

2
その投稿は2年以上前のものです。現在、7-zipは3つ以上のコアでうまく動作しませんか?
クレゴックス

BZIP2は、100-900KBブロックに圧縮されるため、複数のコアでより効率的に圧縮されます。したがって、ブロックを別々のコアに分散できますが、これらのブロックは互いに異なると見なされるため、圧縮効率が失われます。
Ruairi Fullam

4

最初の質問として、7-Zipは多くのアルゴリズムを使用してデータを圧縮および解凍できるアーカイバです。

2番目の質問に対して、プラットフォームが特定の形式をサポートするツールをサポートしていることを確認してください。たとえば、MacでRARを使用することは避けます。使用することは可能ですが、それをサポートする無料のユーティリティがありますが、RARをサポートするWindowsユーティリティが持つはるかに豊富なインターフェイスが欠けています(私の経験では)。


私は個人的にグラフィカルrarプログラムを嫌い、Windowsでもコマンドラインを常に使用しています。
CarlF

4

他の人が述べたように、特定の圧縮形式の選択は、用途と対象読者に大きく依存します。

  • .tar.gzおよびtar.bz2アーカイブは、tar、gzip、およびbzip2ツールがプラットフォーム上で広く普及しており、.tar形式が完全であるため、Linuxシステムでの使用に最適です(Linuxユーザーとファイルを共有するための拡張子によって)。 Unix許可およびその他のプラットフォーム固有のプロパティのサポート。tarアーカイブを圧縮するためのgzipとbzip2の選択は、主に速度と圧縮率に関する決定です。bzip2は小さなファイルを提供しますが、圧縮速度ははるかに遅くなります。これらの形式の短所には、Windowsとの互換性が低く、(潜在的な)単一のファイルを抽出するためにアーカイブ全体を解凍する必要があることが含まれます。

  • ZIPアーカイブは、ネイティブツールを使用してほとんどのプラットフォームで抽出できるため、7-Zipなどのサードパーティのアーカイブソフトウェアのインストールに不快感を覚える技術者以外のユーザーにアーカイブを送信する場合に最適です。圧縮レベルは、より高度なアルゴリズムほど優れておらず、Unixのアクセス許可をサポートしていませんが、たとえば、休日の写真のアーカイブを祖母に送信したい場合には優れた形式です。また、ZIPはいくつかの基本的なパスワード保護を提供し、アーカイブ内の任意の場所からファイルをすばやく抽出できます。

  • 7-Zipは、可能な限り最高の圧縮率が必要な場合に適しています。ZIPのように、Unixファイルのアクセス許可や所有権をサポートせず、ほとんどのプラットフォームにデフォルトでインストールされないため、使用する作業が少し増えますが、圧縮率の向上が重要な場合はWindowsでそれを行う価値があります。すべてLinux環境では、「xz」または「lzma」圧縮ツールとtarを使用することをお勧めします。これらは、「gzip」および「bzip2」とまったく同じ方法で動作しますが、7などのより高度なLZMAアルゴリズムを使用します-ジップ。


2

ちょうど例として、私はこれらの場合に言及されたフォーマットを使用します:

  • テキストファイル(特にログ):bz2
  • 配布するファイルのコレクション(ソースコードなど):gz(実際にはtar.gz)。
  • 各種ファイル:7zip。ほとんどすべてを非常に効率的な方法で圧縮できます。クロスプラットフォーム、オープンソース、安定、軽量、ファイル(ヘッダーとデータ)暗号化、...他に何か頼むことができますか?:)

私はRARを完全に避け、私が知っている誰かからRARファイルを受け取るたびに、私は彼/彼女にその形式が独占的であり、おそらく彼/彼女がライセンスのないソフトウェアを使用していることを止めるように伝えます(ほとんどの人はWinRARの試用版をダウンロードして使い続けますそれは永遠に)。

PS:Ubuntu(主に)とWindows(デュアルブートとVirtualBoxの両方)を実行しています。


1

一般的なツールに統合されているため、少なくとも4つの別々のジョブが混同されることがよくあります。

  1. アーカイブ:可能な限り多くのものを保持しながら、複数のファイル(メタデータを含む)を単一のファイルに結合する機能。Linux / Unixの世界では、アーカイブは伝統的にTARファイル形式で行われます。
  2. 圧縮:バイナリデータのストリームのサイズをロスレスに最小化する機能。Linux / Unixの世界では、これは伝統的にGZipとBZip2によって行われます。
  3. 暗号化:キーでデータをスクランブルする機能
  4. チェックサム:エラーを検出(および場合によっては修正)する機能。

.tar.gzと.tar.bzの遍在性は、すべてを実行する単一のツールよりも、単一のジョブを適切に実行する小さなツールのUnix哲学に対応しています。TARファイル形式は圧縮または暗号化をサポートしていませんが、任意のコンプレッサー(.tar.zipまたは.tar.7zを含む)でさらに圧縮できます。GZipとBZip2の仕事は、単にファイルストリームを別のファイルストリームに圧縮することです。圧縮レイヤーは、メタデータまたは暗号化またはチェックサムを保持する方法を気にする必要はありません。しかし、時間の経過tarとともに、コンプレッサーをより便利に使用するために、プログラムにいくつかのショートカットが作成されました。

zipおよび7zファイル形式では、これらの個別のジョブは単一のスーパーファイル形式の単一のプログラムによって実行されます。

これらのすべてが移植可能な形式であるにもかかわらず、なぜ上記の傾向が維持されるように見えるのですか?特定のプラットフォームで特定のアーカイブ形式を使用することに特別な利点はありますか?

それが行われた方法なので、プログラムのソースコードは伝統的に.tar.gzまたは.tar.bz2として配布されます。ファイルの許可、変更時間などを保存することは、プログラミングに使用されるさまざまなツール(例:make)にとって重要であるためです

個別のアーカイブと圧縮のステップは長年にわたってうまく機能しており、アーカイブと圧縮を自由に組み合わせて一致させることができるという明確な利点があり、その欠点(2ステップ圧縮プロセス)は、よりスマートなツールを開発することで簡単に回避できます(最新のLinux圧縮プログラムのほとんどは、.tar.gzまたは.tar.bz2に直接圧縮し、中間ステップを隠します)。

他のファイル形式に移行する強い理由はありません。新しいコンプレッサーは、伝統を破ることを正当化するための圧縮率が大幅に向上しておらず、tarはすべてを十分に保存できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.