web-dev-qa-db-ja.com

実際に解凍せずに、圧縮されていないgzipファイルのサイズを取得するにはどうすればよいですか?

私のOSの詳細を見つけてください:

$ uname -a
AIX xxyy 1 6 000145364C00

次のコマンドを試して、gzipアーカイブ内のファイルのサイズを取得しました。

$ gzip -l mycontent.DAT.Gz
compressed  uncompr.   ratio   uncompressed_name
-1223644243 1751372002 -75.3%  mycontent.DAT.Gz

これから解凍されたサイズを解釈する方法がわかりません。 4 GBに近い圧縮ファイルサイズ。

だから、私は正しいデータをキャプチャするためにこのオプションを試しました:

$ zcat mycontent.DAT.Gz | wc -c

それは私にこのエラーを与えます:

mycontent.DAT.Gz.Z:A file or directory in the path name does not exist.
0

ソースファイルを解凍せずにシェルスクリプトからこの値を取得する方法を教えてください。

27
user238010

質問のタイトルに答えるには:

実際に解凍せずに、圧縮されていないgzipファイルのサイズを取得するにはどうすればよいですか?

ご存じのとおり、オプション-l--list)は通常、非圧縮サイズを示しています。
データから計算されたものではなく、圧縮ファイルの一部としてヘッダーに保存されました。

あなたの場合、-lオプションは何らかの理由で機能しません。
しかし、生の圧縮データから非圧縮サイズを「測定」することはできません-圧縮データには他に何も情報がありません-圧縮のポイントは何かを除外することなので、驚くことではありません必要ありません。

圧縮されていないデータをディスクに保存する必要はありません。zcat file.gz | wc -cが適切な方法ですが、@ OleTangeが回答したように、zcatgzipのものではないようです。
代替案は、gzipオプション-d--decompress)と-c--to-stdout)をwcオプション-c--bytes):

gzip -dc file.gz | wc -c
30
Volker Siegel

あなたのzcatはGNU zcatではなく、compressからのものです。次を試してください:

gzcat mycontent.DAT.Gz | LC_ALL=C wc -c
gzip -dc mycontent.DAT.Gz | LC_ALL=C wc -c
7
Ole Tange

gzip -lは機能しませんでした。git -1 ...しかし、これはしました:

unzip -l file.Zip
0
grosser

私はWeb内のすべてのサイトを検索していますが、ファイルサイズが4 GBより大きい場合、この問題は解決できません。

私の解決策はこれです

 
 [Oracle @ base tmp] $ timeout --signal = SIGINT 1s 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 

gzファイルから合計サイズを取得する場合:

 [Oracle @ base tmp] $ 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 
0
RaZieRSarE