32GBの.tar.gzアーカイブがあり、この圧縮アーカイブを解凍した場合のファイルのサイズを知りたいのですが。最初にアーカイブを解凍するのを避けて、たとえばdu
。
圧縮アーカイブを解凍せずに含まれているファイルのサイズを調べる(Linuxおよび/またはMacOSXシステムの場合)も可能ですか?
私が知っている別のアーカイブについては、.tar.gzファイルも含まれていることを知っています。アーカイブ内に含まれている解凍されたアーカイブのサイズを計算することもできますか? (たとえば、「開梱」をシミュレートするレベルを設定することによって?)
承知しました。 -tv
を使用して、コンテンツとそのサイズを一覧表示します。例えば。
% tar -tvzf sometools2.tar.gz
-rw-r--r-- madler/admin 3442 2005-02-27 21:40 pngdat.c
-rw-r--r-- madler/admin 24938 2005-02-27 21:39 infgen.c
サイズ(du
など)を合計する場合は、awk
を使用できます。
% tar -tvzf sometools2.tar.gz|awk '{ s += $3 } END { print s }'
28380
埋め込まれた.tar.gz
ファイルの場合、-O
を指定してstdout
に送信することにより、それらを見つけたときに個別に実行する必要があります。
% tar -tvzf imbed.tar.gz
-rw-r--r-- madler/staff 505 2012-02-12 00:06 lucas.c
-rw-r--r-- madler/staff 27913 2005-03-20 11:10 lzwtry.c
-rw-r--r-- madler/staff 8314 2005-02-27 21:42 sometools2.tar.gz
% tar -xOzf imbed.tar.gz sometools2.tar.gz | tar -tvzf - | awk '{ s += $3 } END { print s }'
28380
-tv
出力でそれらを見つけて抽出し、再帰的に実行するスクリプトを作成できます。読者の練習問題として残しておきます。
これらのオプションはGNU tar用であり、LinuxとMac OSXの両方にあります。BSDtarのオプションは異なる場合があります。
まず、.tar.gz
サフィックスは、圧縮されたtar
ファイルであることを意味します。 tar
は、複数のファイルとディレクトリを1つのファイルにパックする手段にすぎません。デフォルトでは圧縮はありません。これがgzip
の出番です。これは単一のファイルを圧縮するためのツールです。したがって、前述のサフィックスは、ファイルやディレクトリの圧縮されたバンドルであることを意味します。
Zipファイル(またはバンドル)全体にのみ関心がある場合、解凍されたサイズを決定する正しい方法は次のとおりです。
gunzip -l ${file}
出力例:
$ gunzip -l syslog.1.gz
compressed uncompressed ratio uncompressed_name
4465670 33295551 86.6% syslog.1
圧縮された数値と圧縮されていない数値はバイトを示します。私のsyslog.1ファイルは約32MB非圧縮になります。
ターミナルでこのようなことをする方法がわかりません(AFAIKは不可能です)。ただし、アーカイブを抽出するためのほとんどのプログラミングライブラリでは、圧縮されたコンテンツ全体を抽出せずに、コンテンツ情報(ツリー、コンテンツのサイズなど)をクエリすることもできます。
したがって、ニーズに合った任意のプログラミング言語でコマンドラインツールを作成し、コマンドラインから呼び出すことができます。