Есть ли способ оценить, сколько места займет файл или каталог определенного размера после сжатия с помощью tar и bzip2?

Есть ли способ оценить, сколько места займет файл или каталог определенного размера после сжатия с помощью tar и bzip2?

Из-за предстоящей смены дистрибутива я хотел бы сделать резервную копию своего домашнего каталога. Однако мой домашний каталог занимает 29 гигабайт. Я хотел бы узнать, сколько места это займет после сжатия с помощью tar cvjf home.tar /home. Есть ли способ, который я могу использовать, чтобы определить размер после сжатия?

решение1

Инструмент tar( bzip2неявно задействованный, поскольку jвы его использовали) подключен к wc(который является стандартным (POSIX) инструментом для подсчета байтов). Следующая команда выведет размер в байтах:

tar cj /home | wc -c

Команда действительно выполняет (и я цитирую здесь другой ответ) «всю работу программы сжатия, не записывая окончательный архив, что было бы пустой тратой времени»; но если вы действительно хотите знать, то это единственный надежный способ.


Вы можете улучшить общий подход следующим образом:

tar cj /home | tee home.tbz2 | wc -c
  • Если вам повезет и места для файла home.tbz2окажется достаточно, то вы не получите никаких ошибок tee, и файл будет иметь размер, равный указанному wc -cв отчете.
  • В противном случае teeбудет сообщено no space left, но он продолжит писать в свой stdout. wc -cсообщит вам, насколько большим будет файл. Фактический (неполный) файл будет меньше, и вам следует удалить его впоследствии.

При использовании tarwith vвы можете пропустить no space leftсообщение. Тем не менее, вы можете сказать, что произошло, сравнив вывод, который вы получили от , wc -cс фактическим размером home.tbz2. В Bash вы можете получить статус выхода с teeпомощью ${PIPESTATUS[1]}.

решение2

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

Возможно, вам следует рассмотреть возможность разбиения данных на управляемые фрагменты и создания нескольких архивов. Это позволит вам разбить большой объем времени, который потребуется для архивирования 29 ГБ, на более мелкие фрагменты.

решение3

Невозможно знать наверняка, до какого размера будут сжаты данные, не сжимая их на самом деле. Что вы можете сделать: получить обоснованное предположение на основе содержимого вашего домашнего каталога. Я не знаю никаких инструментов, которые могли бы сделать это автоматически, но это несложный процесс.

Многие современные форматы файлов уже сжаты, то есть повторное сжатие не даст вам практически никакого (или отрицательного) выигрыша. Для этого типа данных лучше пропустить сжатие и просто скопировать или заархивировать их как есть. Примерами этого могут служить сжатое видео (mp4, webm, mov и т. д.), сжатые изображения (jpeg, png и т. д.), существующие архивы (zip, rar, gz, bz2 и т. д.) и многое другое.

Текстовые файлы обычно сжимаются довольно хорошо, особенно если есть много повторяющихся данных (например, файлы журналов). Вы можете попробовать сделать выборку подмножества файлов, чтобы увидеть, как они сжимаются, и использовать это как предположение или использовать что-то вроде 50% в качестве грубой оценки.

Наконец, посмотрите, какая часть ваших данных состоит из каждого типа, и умножьте это на ваш предполагаемый процент, чтобы получить оценку вашего окончательного размера. Например, если 20 ГБ ваших данных — это сжатые данные, а 9 ГБ — текстовые файлы, ваш окончательный размер сжатых данных, вероятно, будет варьироваться от 21 ГБ до 25 ГБ.

Связанный контент