私の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
ソースファイルを解凍せずにシェルスクリプトからこの値を取得する方法を教えてください。
質問のタイトルに答えるには:
実際に解凍せずに、圧縮されていない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
あなたのzcat
はGNU zcatではなく、compressからのものです。次を試してください:
gzcat mycontent.DAT.Gz | LC_ALL=C wc -c
gzip -dc mycontent.DAT.Gz | LC_ALL=C wc -c
gzip -l
は機能しませんでした。git -1
...しかし、これはしました:
unzip -l file.Zip
私は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