
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 updatedb
ist 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 -v
der 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 printf
für jede Zeile in der Ausgabe von aufgerufen wird updatedb -v
. Besser ist es, wenn wir printf
nur 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 tar
direkt 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.