Есть ли способ проверить, насколько файл может быть сжат без фактического сжатия?

225
mydoghasworms

У меня есть большой (80 ГБ) файл виртуального диска, который я хочу сжать, но прежде чем я это сделаю, я хочу посмотреть, насколько он сжимаем на самом деле, прежде чем приступить к созданию другого (потенциально) большого файла (если окажется, что данные не могут сильно сжаться).

Есть ли способ сделать это? т.е. анализ существующего набора данных, чтобы увидеть, есть ли много места для сжатия без фактической записи выходного файла?

0
«без фактического сжатия» означает «без создания файла» или «без использования циклов ЦП»? Kamil Maciorowski 5 лет назад 0
Без создания файла, да. Уточнили вопрос, спасибо за комментарий. mydoghasworms 5 лет назад 0
Примечание (относительно вашего исходного вопроса): `tar` не сжимается. Kamil Maciorowski 5 лет назад 0
Ах да извини mydoghasworms 5 лет назад 0

1 ответ на вопрос

4
Kamil Maciorowski

Можно использовать любой инструмент сжатия, который может записывать в стандартный вывод. Просто передай это wc -c. Пример:

gzip -c -9 < bigfile | wc -c 

Обратите внимание, что инструмент выполняет свою работу и нагружает ваш процессор независимо от того, куда выводится.

Я бы добавил `pv bigfile | GZIP | wc -c` или даже `pv -cN raw bigfile | GZIP | pv-cN на молнии | wc -c` если вы хотите вывод результатов. grawity 5 лет назад 2
Таким образом, нет способа просто проанализировать данные, подлежащие сжатию, чтобы увидеть, насколько они будут сжаты, фактически не сжимая их, верно? Потому что, если я правильно понимаю, что здесь происходит (потому что, возможно, я не), то это на самом деле сжимает данные, чтобы выяснить, насколько велик результат? mydoghasworms 5 лет назад 0
@mydoghasworms Я думаю, что некоторые эвристики, которые работают в некоторых случаях, возможны; но я не могу сказать, что видел инструмент, который работает таким образом. Kamil Maciorowski 5 лет назад 0
Спасибо, в таком случае я приму ваш ответ. Я начал процесс с рекомендации @grawity использовать pv для вывода результатов. Потребуется еще полчаса, чтобы выяснить, сколько можно сжать этот файл объемом 80 ГБ. С точки зрения затрат времени и энергии по сравнению с затратами на хранение, вероятно, стоит скопировать файл как есть :-) В любом случае, это интересное упражнение, так что спасибо за ответ! mydoghasworms 5 лет назад 0
@ grawity Есть ли способ создать работающее обновление из `wc`, чтобы сказать вам, насколько велик результат, пока он работает? (Я предполагаю, возможно, ошибочно, что результаты процесса передаются по конвейеру - в отличие от ожидания завершения предыдущей задачи - но пока я не замечаю какого-либо увеличения использования памяти). mydoghasworms 5 лет назад 0
@mydoghasworms Вот для чего вторая `pv`. Kamil Maciorowski 5 лет назад 1
Ах, неважно, ответ был там в командной строке, глядя мне в лицо! mydoghasworms 5 лет назад 0
Спасибо, извините, только заметил это сейчас! Я смотрел только на бар и не заметил размер. mydoghasworms 5 лет назад 0

Похожие вопросы