Вопрос или проблема
Есть ли способ вывести распакованный размер файла .bz2 без его полного распаковки?
Как отмечали другие, bzip2 не предоставляет много информации. Но этот метод работает — вам придется распаковать файл, однако вам не придется записывать распакованные данные на диск, что может быть «достаточно хорошим» решением для вас:
$ ls -l foo.bz2
-rw-r--r-- 1 ~quack ~quack 2364418 Jul 4 11:15 foo.bz2
$ bzcat foo.bz2 | wc -c # bzcat распаковывает в stdout, wc -c считает байты
2928640 # количество байтов распакованных данных
Вы можете передать этот вывод в другую программу, чтобы получить удобочитаемую форму:
$ ls -lh foo.bz2
-rw-r--r-- 1 quack quack 2.3M Jul 4 11:15 foo.bz2
$ bzcat foo.bz2 | wc -c | perl -lne 'printf("%.2fM\n", $_/1024/1024)'
2.79M
Мне нужно было сделать это для списка файлов, и я изменил ответ @quack quixote, добавив цикл.
for file in *.bz2; do
bzcat ${file} | wc -c | perl -nle 'printf("%s: %.2fM\n", "'${file}'", $_/1024/1024)'
done
Чтобы прочитать текстовый файл с расширением .bz без распаковки.
bzcat dbtax_ext_en.ttl.bz2 |zless
Ответ или решение
Определение размера декомпрессированного файла .bz2 без его полного распаковки на диск может быть выполнено с помощью доступных утилит командной строки. Хотя сам формат bzip2 не содержит информации о размере оригинального файла, существует способ, который позволяет распаковать файл и подсчитать количество байт, не записывая распакованные данные на диск.
Способ определения размера декомпрессированного файла .bz2
Представим себе следующую ситуацию: у вас есть сжатый файл foo.bz2
, и вы хотите узнать, сколько он занимает в декомпрессированном виде. Для этого можно воспользоваться простой командой в UNIX-системах:
-
Проверка размера сжатого файла:
ls -l foo.bz2
Эта команда покажет размер файла
foo.bz2
в сжатом виде. Например:-rw-r--r-- 1 user user 2364418 Jul 4 11:15 foo.bz2
-
Подсчет байт декомпрессированных данных:
bzcat foo.bz2 | wc -c
В данном случае
bzcat
распакует файл на стандартный вывод (stdout), аwc -c
подсчитает количество байт в декомпрессированных данных. Например:2928640
Преобразование результата в удобный формат
Для того чтобы получить более читаемую форму (например, в мегабайтах), можно использовать такие возможности, как perl
для форматирования:
bzcat foo.bz2 | wc -c | perl -lne 'printf("%.2fM\n", $_/1024/1024)'
Результат, например, будет: 2.79M
, что указывает на размер декомпрессированного файла в мегабайтах.
Автоматизация процесса для нескольких файлов
Если необходимо проделать эту операцию для нескольких файлов в каталоге, можно подготовить простой цикл:
for file in *.bz2; do
bzcat "${file}" | wc -c | perl -nle 'printf("%s: %.2fM\n", "'${file}'", $_/1024/1024)'
done
Каждый файл будет обработан по описанному выше методу и вывод информации будет структурирован.
Заключение
Хотя прямого способа узнать размер несжатого файла без какой-либо распаковки не существует, описанный метод позволяет получить требуемую информацию, минимизируя использование дискового пространства. Это решение может быть полезным в сценариях, когда информация нужна только для анализа или отчетности. Использование утилит командной строки обеспечивает точность и эффективность выполнения задачи.