
É 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 -v
a 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 printf
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
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 tar
diretamente, 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.