Як тільки файл gzipped, чи є спосіб швидкого запиту, щоб він сказав, який розмір нестисненого файлу (не розпаковуючи його), особливо у випадках, коли нестиснений файл має розмір> 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
знову, імовірно, він читає колонтитул, як описано вище.
Мені було просто цікаво, чи є спосіб отримати розмір нестисненого файлу, не спершу розпаковувати його, це було б особливо корисно в тому випадку, коли gzipped файли містять 50 ГБ + даних і знадобиться деякий час, щоб розпакувати за допомогою таких методів, як gzcat foo.gz | wc -c
EDIT: Обмеження 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
Я був би здивований, якби тут багато блукали 23 роки. Я впевнений, що їх є, але серед того, що я можу сказати, середній вік становить приблизно 30-35 років.
xz
який не має цього обмеження. GNU переходить на xz
.
xz
що "вирішили б" цю проблему.
gzip
треба бути старшим, ніж багато користувачів у цій спільноті!