Fortschrittsbalken in updatedb

Fortschrittsbalken in updatedb

Ist es möglich, beim Ausführen einen zuverlässigen Fortschrittsbalken (oder nur eine zuverlässige Information darüber, wie lange es dauern wird) zu erhalten updatedb?

Antwort1

Dies ist zwar keine effiziente Lösung, aber auch nicht so schlimm, wie alles zweimal zu durchlaufen.

Die Anzahl der von verarbeiteten Dateien updatedbist gleich:

updatedb -v | wc -l

oder ungefähr gleich:

find / -mount | wc -l

Wir können diese Befehle nicht verwenden, um die Nummer zu erhalten, da es sonst zu einer zweimaligen Schleife kommen würde.

Wir können jedoch die Anzahl der verwendeten Inodes verwenden, die ungefähr gleich ist:

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

Mit diesem Wert können wir berechnen, wie weit wir gekommen sind, während updatedb -vder Befehl ausgeführt wurde:

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

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

Dies ist sehr ineffizient, da printffür jede Zeile in der Ausgabe von aufgerufen wird updatedb -v. Besser ist es, wenn wir printfnur für einige der Zeilen arbeiten.

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

Antwort2

Nein, diese Option gibt es nicht und es sollte auch keine geben.

Wenn Sie das messen müssen, müssen Sie zunächst wissen, wie viele Dateien auf Ihrem System vorhanden sind. Das bedeutet, dass alles zweimal durchlaufen wird. Das kann langsam sein.

Ein offensichtliches Beispiel: Wenn Sie den Kernel-Quellcode mit extrahieren file-roller, ist dies langsamer, als wenn Sie dasselbe tardirekt mit tun, weil File-Roller zuerst alle Dateien auslagern muss (sonst wird der Fortschrittsbalken möglicherweise falsch angezeigt) und Sie eine Weile warten müssen, bevor der Extraktionsvorgang tatsächlich beginnt.

verwandte Informationen