Barra de progresso em atualizadob

Barra de progresso em atualizadob

É possível obter uma barra de progresso confiável (ou apenas uma informação confiável de quanto tempo levará) ao fazer isso updatedb?

Responder1

Esta não é uma solução eficiente, mas não é tão ruim quanto repetir tudo duas vezes.

O número de arquivos processados ​​por updatedbé igual a:

updatedb -v | wc -l

ou aproximadamente igual a:

find / -mount | wc -l

Não podemos usar esses comandos para obter o número, porque seria um loop duplo.

Mas podemos usar o número de inodes usados, que é aproximadamente o mesmo:

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

Tendo este valor, podemos calcular o quão longe chegamos durante updatedb -va execução do comando:

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

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

Isso é muito ineficiente, porque printfé chamado para cada linha na saída de updatedb -v. Melhor se considerarmos printfapenas algumas das linhas.

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

Responder2

Não, essa opção não existe e também não deveria existir.

Se você precisar medir isso, primeiro você deve saber quantos arquivos estão presentes no seu sistema, isso significa repetir tudo duas vezes, pode ser lento

Um exemplo evidente é que se você extrair o código-fonte do kernel com file-roller, será mais lento do que fazer a mesma coisa tardiretamente, porque o rolo de arquivos precisa arquivar todos os arquivos primeiro (caso contrário, a barra de progresso pode ser exibida incorretamente) e você espera por um enquanto antes do processo de extração realmente começar.

informação relacionada