Индикатор выполнения в updatedb

Индикатор выполнения в updatedb

Можно ли получить надежную шкалу прогресса (или просто надежную информацию о том, сколько времени это займет) при выполнении updatedb?

решение1

Это неэффективное решение, но не такое плохое, как повторный цикл.

Количество обработанных файлов updatedbравно:

updatedb -v | wc -l

или примерно равно:

find / -mount | wc -l

Мы не можем использовать эти команды для получения числа, поскольку это приведет к двойному циклу.

Но мы можем использовать количество используемых инодов, которое примерно одинаково:

df -i | grep '/$' | awk '{print $3}'

Имея это значение, мы можем посчитать, как далеко мы продвинулись за время updatedb -vвыполнения команды:

count=$(df -i | grep '/$' | awk '{print $3}')

sudo updatedb -v | while read
do
    printf "%3d\r" $((100 * (++i) / count))
done

Это очень неэффективно, поскольку printfвызывается для каждой строки в выводе updatedb -v. Лучше, если мы будем вызывать printfтолько для некоторых строк.

count=$(df -i | grep '/$' | awk '{print $3}')

sudo updatedb -v | while read
do
    if (( ++i % (count/20) == 0 )); then
        printf "%3d\r" $((100 * i / count))
    fi
done

решение2

Нет, такой опции нет и быть не может.

Если вам нужно это измерить, вы должны сначала узнать, сколько файлов присутствует в вашей системе, это означает, что нужно дважды все перебрать, это может быть медленно.

Одним из наглядных примеров является то, что если вы извлекаете исходный код ядра с помощью file-roller, это происходит медленнее, чем делать то же самое tarнапрямую, поскольку file-roller сначала должен извлечь все файлы (в противном случае индикатор выполнения может отображаться неправильно), и вам приходится ждать некоторое время, прежде чем процесс извлечения фактически начнется.

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