После того, как файл распакован, существует ли способ быстро запросить его, чтобы сказать, каков размер несжатого файла (без распаковки), особенно в случаях, когда размер несжатого файла составляет> 4 ГБ.
Согласно RFC https://tools.ietf.org/html/rfc1952#page-5 вы можете запросить последние 4 байта файла, но если несжатый файл был> 4 ГБ, то значение просто представляетuncompressed value modulo 2^32
Это значение также можно получить, запустив его gunzip -l foo.gz
, однако «несжатый» столбец просто содержит uncompressed value modulo 2^32
снова, предположительно, поскольку он читает нижний колонтитул, как описано выше.
Мне было просто интересно, есть ли способ получить размер несжатого файла без необходимости сначала распаковывать его, это было бы особенно полезно в случае, когда сжатые файлы содержат более 50 ГБ данных и потребуется некоторое время для распаковки с использованием таких методов, как gzcat foo.gz | wc -c
РЕДАКТИРОВАТЬ: ограничение 4 ГБ открыто подтверждается на man
странице gzip
утилиты, включенной в OSX ( Apple gzip 242
)
BUGS
According to RFC 1952, the recorded file size is stored in a 32-bit
integer, therefore, it can not represent files larger than 4GB. This
limitation also applies to -l option of gzip utility.
gzip
вышел в 1992 году. Я был бы удивлен, если бы здесь было много 23-летних. Я уверен, что есть некоторые, но из того, что я могу сказать, средний возраст составляет приблизительно 30-35.
xz
которого нет этого ограничения. GNU переключается на xz
.
xz
это «решит» эту проблему.
gzip
должен быть старше, чем многие пользователи в этом сообществе!