После того, как файл распакован, существует ли способ быстро запросить его, чтобы сказать, каков размер несжатого файла (без распаковки), особенно в случаях, когда размер несжатого файла составляет> 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
должен быть старше, чем многие пользователи в этом сообществе!gzip
вышел в 1992 году. Я был бы удивлен, если бы здесь было много 23-летних. Я уверен, что есть некоторые, но из того, что я могу сказать, средний возраст составляет приблизительно 30-35.xz
которого нет этого ограничения. GNU переключается наxz
.xz
это «решит» эту проблему.Ответы:
Я полагаю, что самый быстрый способ - это изменить,
gzip
чтобы тестирование в подробном режиме выводило количество распакованных байтов; в моей системе, с 7761108684-байтовым файлом, я получаюЧтобы изменить gzip (1.6, как доступно в Debian), патч выглядит следующим образом:
источник
-t
уже оптимизирован в этом отношении? Улучшение достаточно маленькое, чтобы выглядело так, как будто вы только сэкономили время вывода.gzip
; Я просто запускаюgzip
сжатые файлы, которые не сжимают их, а просто проверяют. (Патч - быстрое и грязное доказательство концепции, для работы с ним требуется еще несколько измененийgunzip
.)FCOMMENT
поле. Таким образом, пользователи могут запросить диапазон байтов, чтобы получить эти данные. Это было бы полезно в моем случае, особенно для предметов, хранящихся в Amazon S3Если вам нужен размер сжатого файла или набора файлов, лучше всего использовать
tar -z
илиtar -j
вместо того , чтобы,gzip
какtar
включает несжатый размер файлов. Используйте,lesspipe
чтобы просмотреть список файлов:Если
less
настроен для использованияlesspipe
:Просто имейте в виду, что это может занять очень много времени. Однако ваша система остается отзывчивой, что позволяет убить процесс распаковки.
Другой подход - записать сжатый коэффициент и запросить этот [текстовый файл]:
Это требует вычисления, чтобы найти реальный размер файла.
Вы также можете сделать то же самое с
tar
, что на самом деле то же самое , что я делаю с резервными копиями большого размера, так как это препятствует выполнению всего процесса распаковки, например, для получения только размера или имени файла.источник
tar
вами в архиве записан исходный размер файла. Я не уверен,zip
ведет себя по-другому, с другой стороны.wc -c
команду.Как насчет
источник
Это займет много времени, но даст вам окончательный размер в байтах.
источник