回答:
tar.gzファイルにはインデックスがありません。zipやその他のアーカイブ形式とは異なり、含まれているファイルやその他のメタデータのリストを取得するのは簡単でも安くもありません。どのファイルがアーカイブに含まれているかを示すために、tarは実際にはアーカイブを解凍してファイルを抽出する必要があり-t
ますが、オプションの場合はメモリ内でのみ行われます。
ユースケースの一般的なパターンが、含まれるファイルをアーカイブにリストすることである場合、zipなどの圧縮ファイルにファイルインデックスを追加できるアーカイブ形式の使用を検討してください。
おそらく、もっと複雑なシナリオについては、HDF5形式も確認したいと思うかもしれません。
私はちょうど私の答えを証明するために、いくつかの測定をしなければならなかったし、それらの多くのファイルをいくつかのディレクトリを作成し、それらの両方を詰め、tar czf files#.tgz files#
とzip -r files#.zip files#
。
テストでは、ディスクの速度の測定を回避するために、アンパックコマンドを毎回2回実行し、2回目の実行の結果を取得しました。
100,000個の空のファイルfiles1
を含むディレクトリ。
$ time tar tzf files1.tgz >/dev/null
tar tzf files1.tgz > /dev/null 0,56s user 0,09s system 184% cpu 0,351 total
$ time unzip -l files1.zip >/dev/null
unzip -l files1.zip > /dev/null 0,30s user 0,34s system 99% cpu 0,649 total
ここではzipが遅くなります。
各512バイトのランダムデータを持つ5,000ファイルをfiles2
含むディレクトリ。
$ time tar tzf files2.tgz >/dev/null
tar tzf files2.tgz > /dev/null 0,14s user 0,03s system 129% cpu 0,131 total
$ time unzip -l files2.zip >/dev/null
unzip -l files2.zip > /dev/null 0,03s user 0,06s system 98% cpu 0,092 total
まだ納得できませんが、今回はzipの方が高速です。
各5kBのランダムデータfiles3
を含む5,000ファイルを含むディレクトリ。
$ time tar tzf files3.tgz >/dev/null
tar tzf files3.tgz > /dev/null 0,42s user 0,03s system 111% cpu 0,402 total
$ time unzip -l files3.zip >/dev/null
unzip -l files3.zip > /dev/null 0,03s user 0,06s system 99% cpu 0,093 total
このテストでは、ファイルが大きくなるほど、tarがそれらをリストすることが難しくなることがわかります。
私にとって、zipは、オーバーヘッドが非常に小さい(ほとんど空の)ファイルでのみ気付く小さなオーバーヘッドをもたらすように見えますが、多数の大きいファイルの場合、アーカイブに含まれるファイルをリストするときにコンテストに勝ちます。
-z
オプションを忘れました:tar -tvfz
。類似:tar tvfzではなくtar tvfコマンドを使用するとどうなりますか?