3

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

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

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

1 ответ1

3

Извините, но это невозможно. Из самой 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

Внимание:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .