Из-за предстоящей смены дистрибутива я хотел бы сделать резервную копию своего домашнего каталога. Однако мой домашний каталог занимает 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
сообщит вам, насколько большим будет файл. Фактический (неполный) файл будет меньше, и вам следует удалить его впоследствии.
При использовании tar
with 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 ГБ.