Locate

updatedb 中的進度條

  • July 18, 2012

這樣做時是否可以獲得可靠的進度條(或只是一個可靠的資訊需要多長時間)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

引用自:https://unix.stackexchange.com/questions/43356