Вопрос или проблема
У меня есть файл file.tar.bz2 размером около 50 ГБ, и я хотел бы его извлечь, однако я не знаю, сколько места мне потребуется. Существует ли команда для вывода коэффициента сжатия файла tar.bz2?
Я не знаю команды, специально предназначенной для вывода коэффициента сжатия, но
bzip2 -dc file.tar.bz2 | wc -c
должна показать вам количество байтов, занимаемых несжатым tar-файлом. Некоторая часть этого пространства занята метаданными tar, но это должно дать приблизительную оценку.
tar -tvjf file.tar.bz2
Выведет список всех файлов в архиве tar, их размеры и другую информацию. Всегда можно вывести результат через скрипт awk, чтобы сложить числа…
tar -tvjf file.tar.bz2 | awk '{i+=$3;print i" "$0}' | tail
Поскольку это место, куда привел меня поиск для того же самого с файлами .tar.gz, я добавлю, что
tar -tvf file.tar.gz | awk '{i+=$3} END{print i}'
будет работать для этих файлов. То есть просто уберите j, которое указывает на формат bz2. Я бы оставил это как комментарий к посту @TooLazyToLogIn, но у меня для этого недостаточно репутации.
Команда tar (сама по себе) действительно не сжимает данные.
Вопрос должен быть:
Существует ли команда для определения коэффициента сжатия файла .bz2?
Для gz смотрите https://stackoverflow.com/questions/2712173/check-the-total-content-size-of-a-tar-gz-file
Для bz2 я нашел: https://unix.stackexchange.com/questions/546465/bzip2-check-files-decompressed-size-without-actually-decompressing-it
Выглядит немного устаревшим.
Так что:
gzip -c9 radioconda-2024.05.29-MacOSX-x86_64.sh > radioconda-2024.05.29-MacOSX-x86_64.sh.gz
gzip -l radioconda-2024.05.29-MacOSX-x86_64.sh.gz
> compressed uncompressed ratio uncompressed_name
> 423397890 432210564 2.0% radioconda-2024.05.29-MacOSX-x86_64.sh
Но я не нашел никакого явного флага для bzip2
Описанные выше ответы в таком случае вполне подходят, к сожалению 🙁
Ответ или решение
Определение коэффициента сжатия tar.bz2 файла
Если у вас есть файл размером 50 ГБ с расширением .tar.bz2
, и вы хотите извлечь его, но не знаете, сколько свободного места вам потребуется, вы, возможно, ищете команду для определения коэффициента сжатия данного файла. Однако конкретной команды, которая могла бы напрямую вычислить этот коэффициент для tar.bz2 файла, не существует. Тем не менее, существуют методы, которые могут помочь вам получить эту информацию косвенно.
Использование bzip2 и wc для вычисления размера нераспакованного файла
Используя команду bzip2
, можно извлечь данные и подсчитать их размер с помощью wc -c
. Вот пример команды:
bzip2 -dc file.tar.bz2 | wc -c
Эта команда декомпрессирует файл и подсчитывает количество байтов в нераспакованном tar файле. Имейте в виду, что часть объема займет метаданные tar, но полученное значение даст вам приблизительное представление о требуемом дисковом пространстве.
Использование tar и awk для суммирования размеров файлов внутри архива
Чтобы получить информацию о каждом файле внутри архива tar.bz2, используйте следующую команду:
tar -tvjf file.tar.bz2 | awk '{i+=$3;print i" "$0}' | tail
Эта команда перечисляет все файлы в архиве и подсчитывает их размеры. Вы также можете использовать команду без параметра j
для работы с архивами tar.gz.
tar -tvf file.tar.gz | awk '{i+=$3} END{print i}'
Альтернативные пути и дополнительные ресурсы
К сожалению, для bzip2 отсутствует флаг, который бы предоставлял компрессионное соотношение напрямую, как это можно сделать с помощью gzip -l
для gzip файлов. Поэтому методы, приведенные выше, остаются наиболее применимыми и актуальными.
Ресурсы для дальнейшего изучения
- Unix Stack Exchange: Проверка размера распакованного файла без фактического распаковки
- Stack Overflow: Как определить общий размер содержимого tar.gz файла
В результате, правильное использование приведенных команд и инструментов позволит вам получить необходимую информацию о размере и коэффициенте сжатия файлов, что обеспечит планирование ресурсов более эффективно.