Locate
updatedb 中的進度條
這樣做時是否可以獲得可靠的進度條(或只是一個可靠的資訊需要多長時間)
updatedb
?
不,沒有這樣的選項,也不應該有任何選項。
如果您需要測量它,您必須首先知道系統上有多少文件,這意味著循環遍歷所有內容兩次,這可能會很慢
一個明顯的例子是,如果你用 提取核心原始碼
file-roller
,它比tar
直接用它做同樣的事情要慢,因為 file-roller 需要先歸檔所有文件(否則進度條可能顯示不正確),然後你等待一個在提取過程實際開始之前。
這不是一個有效的解決方案,但不如循環遍歷所有內容兩次那麼糟糕。
處理的文件數
updatedb
等於:updatedb -v | wc -l
或大致等於:
find / -mount | wc -l
我們不能使用這些命令來獲取數字,因為它會循環兩次。
但我們可以使用已使用的 inode 數量,大致相同:
df -i | grep '/$' | awk '{print $3}'
有了這個值,我們就可以計算出
updatedb -v
命令執行的距離:count=$(df -i | grep '/$' | awk '{print $3}') sudo updatedb -v | while read do printf "%3d\r" $((100 * (++i) / count)) done
這是非常低效的,因為
printf
輸出中的每一行都會呼叫updatedb -v
. 如果我們只針對其中的一些行,那就更好printf
了。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