web-dev-qa-db-ja.com

tar gzファイルの合計コンテンツサイズを確認する

コマンドラインから.tar.gzファイルの非圧縮ファイルデータの合計サイズを抽出するにはどうすればよいですか?

46
Ztyx

これにより、抽出されたファイルの合計コンテンツサイズが合計されます。

$ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc

出力はバイト単位で与えられます。

説明:tar tzvfは、ls -lのような詳細形式でアーカイブ内のファイルをリストします。 sedおよびcutは、ファイルサイズフィールドを分離します。 2番目のsedは、最初のサイズを除くすべてのサイズの前に+を付け、pasteはそれらを連結し、bcによって評価される合計式を与えます。

これにはメタデータが含まれていないことに注意してください。そのため、ファイルを抽出するときにファイルが占めるディスク容量は大きくなります。非常に小さなファイルが多数ある場合は、潜在的に何倍も大きくなります。

31
Ztyx

コマンドラインからこれを行いたい場合は、-lオプションをgzipに試してください:

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar
57
Matthew Mott

コマンド gzip -l archive.tar.gzは、2Gbを超えるファイルサイズでは正しく機能しません。私がお勧めします zcat archive.tar.gz | wc --bytes代わりに、本当に大きなファイルの場合。

24
swdev

次のコマンドを使用します。

tar -xzf archive.tar.gz --to-stdout|wc -c
4
elec3647

これは古い答えです。しかし、私はちょうど2年前にこのためのツールを書きました。 gzsize と呼ばれ、ディスク上のファイル全体を実際に解凍することなく、gzipされたファイルの非圧縮サイズを提供します。

$ gzsize <your file>
3
bfontaine

私はすべてのサイトをウェブで見つけていますが、ファイルサイズが4GBより大きい場合にサイズを取得するというこの問題を解決しません。

最初に、どれが最も速いですか?

 [Oracle @ base tmp] $ time zcat Oracle.20180303.030001.dmp.tar.gz | wc -c 
 6667028480 
 
実0m45.761s 
ユーザー0m43.203s 
 sys 0m5.185s 
 [Oracle @ base tmp] $ time gzip -dc Oracle.20180303.030001.dmp.tar.gz | wc -c 
 6667028480 
 
実0m45.335s 
ユーザー0m42.781s 
 sys 0m5.153s 
 [Oracle @ base tmp] $ time tar -tvf Oracle.20180303.030001.dmp.tar.gz 
 -rw-r--r-- Oracle/oinstall 111828 2018-03-03 03: 05 Oracle.20180303.030001.log 
 -rw-r ----- Oracle/oinstall 6666911744 2018-03-03 03:05 Oracle.20180303.030001.dmp 
 
 real 0m46。 669s 
ユーザー0m44.347s 
 sys 0m4.981s 

間違いなく、tar -xvfが最も高速ですが、¿ヘッダーを取得した後に実行をキャンセルする方法は?

私の解決策はこれです

 
 [Oracle @ base tmp] $ time echo $(timeout --signal = SIGINT 1s tar -tvf Oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}')| grep -o '[[:digit:]] *' | awk '{sum + = $ 1} END {print sum}' 
 6667023572 
 
 real 0m1.005s 
 user 0m0.013s 
 sys 0m0 .066s 
 
2
RaZieRSarE