数個のファイルをリストまたは抽出するときに、tarアーカイブがシーク可能であることが大きな違いを生むようです。残念ながら、manページには情報が非常に不足しています。圧縮アーカイブはシーク可能ではないようです[1]が、その投稿には証拠がありません。この問題に関して、より信頼できる情報源がありますか?
数個のファイルをリストまたは抽出するときに、tarアーカイブがシーク可能であることが大きな違いを生むようです。残念ながら、manページには情報が非常に不足しています。圧縮アーカイブはシーク可能ではないようです[1]が、その投稿には証拠がありません。この問題に関して、より信頼できる情報源がありますか?
回答:
各ファイルのファイルヘッダーには、アーカイブ内のサイズが含まれます。これにより、不要な場合にファイルの内容をスキップできます。Tarは、ファイルの内容に続く次のヘッダーを探すだけです。ヘッダー形式に関するドキュメントがあります。
圧縮されたtarファイルはまさにそれです。適切な圧縮解除プログラム(多くの場合gunzip)または圧縮プログラム(gzip)を使用して、圧縮されていないtarファイル形式に自由に切り替えることができます。一部のtarプログラムでは、これが唯一のオプションです。tarファイル自体は、圧縮されていてもシーク可能のままです。
シークできないのは、圧縮形式です。圧縮は、圧縮されるデータを表すために比較的少数のバイトを見つけることによって機能します。比較的少ないバイト値または繰り返されるバイト文字列を持つデータのブロックは、よく圧縮されます。さまざまなバイト値が多く、繰り返されるバイト文字列がほとんどないデータのブロックは、圧縮されても圧縮されません。一部のデータでは、圧縮により実際にファイルのサイズが増加する場合があります。ファイル内のブロックの圧縮率は異なります。非常に圧縮性の高いファイルと比較的非圧縮性のファイルで構成されるtarファイルの場合、分散は極端になる可能性があります。
圧縮データ内には、非圧縮データ内の特定の位置をシークするメカニズムはありません。一部の圧縮プログラムでは、圧縮アーカイブを使用して個々のファイルをシークできますが、圧縮アーカイブがアクセスできるファイルはtarファイルのみです。これらのツールを使用してtarファイルを圧縮することはほとんどありませんが、ファイルセットをアーカイブするときに圧縮または非圧縮のtarファイルが含まれる場合があります。