19

Пожалуйста, найдите детали моей ОС:

$ 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 ГБ.

Итак, я попробовал эту опцию, чтобы получить правильные данные:

$ zcat mycontent.DAT.Gz | wc -c

Это дает мне эту ошибку:

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

Подскажите, пожалуйста, как получить это значение из сценария оболочки, не распаковывая исходный файл?

4 ответа4

17

Чтобы ответить на заголовок вопроса:

Как я могу получить несжатый размер файла 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
5

Вы zcat не GNU Zcat, но от сжатия. Пытаться:

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

gzip -l не работает для меня, просто git -1 ... но это сработало:

unzip -l file.zip
0

Я нахожу все сайты в Интернете и не решаю эту проблему, получая размер, когда размер файла больше 4 ГБ.

мое решение таково:


[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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .