tar -tvfはファイルを解凍しますか、それとも単に名前をリストしますか?


9

tar.gz32 GBのファイルがあります。特定のフォルダをそこから抽出しようとしたので、次のコマンドを使用して内容を一覧表示し、ファイルの構造を表示しました。

tar -tvf file.tar.gz > files.txt

すべてのファイルをリストするのは永遠に時間がかかるようです。私の質問は、-tフラグもファイルを抽出するのですか?私はそれがディスクに抽出しないことを知っていますが、時間がかかるので、実際にそれらをある種のバッファで処理するのかどうか疑問に思います。


1
-zオプションを忘れました:tar -tvfz。類似:tar tvfzではなくtar tvfコマンドを使用するとどうなりますか?
smci

3
@smci:自動検出されるので、忘れることはありません。
Ry-

回答:


14

tar.gzファイルにはインデックスがありません。zipやその他のアーカイブ形式とは異なり、含まれているファイルやその他のメタデータのリストを取得するのは簡単でも安くもありません。どのファイルがアーカイブに含まれているかを示すために、tarは実際にはアーカイブを解凍してファイルを抽出する必要があり-tますが、オプションの場合はメモリ内でのみ行われます。

ユースケースの一般的なパターンが、含まれるファイルをアーカイブにリストすることである場合、zipなどの圧縮ファイルにファイルインデックスを追加できるアーカイブ形式の使用を検討してください。

おそらく、もっと複雑なシナリオについては、HDF5形式も確認したいと思うかもしれません。

測定

私はちょうど私の答えを証明するために、いくつかの測定をしなければならなかったし、それらの多くのファイルをいくつかのディレクトリを作成し、それらの両方を詰め、tar czf files#.tgz files#zip -r files#.zip files#

テストでは、ディスクの速度の測定を回避するために、アンパックコマンドを毎回2回実行し、2回目の実行の結果を取得しました。

テスト1

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が遅くなります。

テスト2

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の方が高速です。

テスト3

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は、オーバーヘッドが非常に小さい(ほとんど空の)ファイルでのみ気付く小さなオーバーヘッドをもたらすように見えますが、多数の大きいファイルの場合、アーカイブに含まれるファイルをリストするときにコンテストに勝ちます。

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