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


25

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

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


アーカイブの整合性について確かですか?独自の圧縮サイズは〜1.7Gと報告されます。本当に〜4GBであれば、問題があると思います。
テルドン

回答:


26

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

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

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

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

圧縮されていないデータをディスクに保存する必要はありません:zcat file.gz | wc -c正しい方法です-しかし、@ OleTangeが答えたzcatように、あなたはからのものではないようgzipです。
別の方法は、gzipオプション-d--decompress)と組み合わせてオプション()および-c--to-stdout)を使用することです。wc-c--bytes

gzip -dc file.gz | wc -c

13
この-lオプションには、4GBを超えるファイルのバグがあります:bugs.debian.org/cgi-bin/bugreport.cgi
bug=

6

あなたzcatはGNU zcatではなく、compressです。試してください:

gzcat mycontent.DAT.Gz | wc -c
gzip -dc mycontent.DAT.Gz | wc -c

これにより、ソースファイルが解凍されます。多分それはOPが望むものですが、これは質問への答えではありません。
マルコ

それは.Zで終わるファイルを探していた、なぜああ、それは説明する
ヘネス

0

gzip -lは私には機能しませんでした、ただgit -1 ...

unzip -l file.zip

0

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

私の解決策はこれです:

[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

1
これは、tarballのみで機能することを説明し、クリーンアップした場合(タイムアウトは不要で、grepも不要)、より適切な回答になります。
kbolino
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.