Barra de progresso no updatedb

7

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

    
por student 18.07.2012 / 10:20

2 respostas

4

Não, não existe tal opção, assim também não deve ter nenhuma.

Se você precisa 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 evicente é que, se você extrair o código-fonte do kernel com file-roller , será mais lento do que fazer a mesma coisa com tar diretamente, porque o file-roller precisará primeiro arquivar todos os arquivos (caso contrário, a barra de progresso pode ser exibido incorretamente), e você espera um pouco antes de iniciar o processo de extração.

    
por 18.07.2012 / 10:53
5

Esta não é uma solução eficiente, mas não é tão ruim quanto passar por 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 duas vezes.

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

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

Tendo este valor, podemos calcular até onde chegamos enquanto o comando updatedb -v está sendo executado:

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 printf for apenas 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
    
por 18.07.2012 / 15:19

Tags