Резервное копирование с помощью индикатора выполнения
Я хотел бы добавить индикатор выполнения к моей команде резервного копирования 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 ):
Рассчитать накопленный размер файлов
/media/data
,Создайте
backup.tar
и добавьте файлы из/media/data
по одному.После каждого файла рассчитайте текущий процент и отобразите его.
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
Внимание:
- Это, вероятно, замедлит процесс резервного копирования.
- Имена файлов не могут содержать символы новой строки.