Резервное копирование с помощью индикатора выполнения

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

sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz

С помощью приведенной выше команды мне удалось отобразить некоторую информацию, но пока нет индикатора выполнения.

1 ответ

Решение

Извините, но это невозможно. Из файла bar сам:

Synopsis:
  'bar' works just like 'cat', but shows a progress bar in ASCII art on stderr.
  The script's main function is meant to be usable in any Bourne shell to be
  suitable for install scripts without the need for any additional tool.

Проблема в том, что для отображения индикатора выполнения bar сначала должен знать размер файла.

Для извлечения архива это не проблема: если backup.tar является 100 MiB большой и 50 MiB были обработаны до сих пор, мы находимся в 50 % ,

Тем не менее, для создания архива, bar читает из stdin , который бесконечен для всех практических целей. Как сказано в документации :

Бесконечные потоки не хороши: панель отображается только на 0% и на 100%. [...]


Единственный способ отобразить индикаторы выполнения для целей резервного копирования, о которых я могу подумать (помимо компиляции пользовательской версии tar с bar ):

  1. Рассчитать накопленный размер файлов /media/data ,

  2. Создайте backup.tar и добавьте файлы из /media/data по одному.

  3. После каждого файла рассчитайте текущий процент и отобразите его.

  4. GZIP backup.tar (вы можете использовать tar за это).

Пример:

TOTAL=$(du -b /media/data | grep -oP "^\d+")
CURRENT=0
echo "Archiving:"
IFS="
"
for FILE in $(find /media/data -type f); do 
    tar rf backup.tar $FILE
    CURRENT=$(($CURRENT+$(du -b $FILE | grep -oP "^\d+")))
    echo -en "\r"$((100*($CURRENT-1)/$TOTAL+1))"%"
done
echo
echo "Compressing:"
bar backup.tar | gzip > backup.tar.gz
rm backup.tar

Внимание:

  • Это, вероятно, замедлит процесс резервного копирования.
  • Имена файлов не могут содержать символы новой строки.
Другие вопросы по тегам