updatedb 中的進度條

updatedb 中的進度條

執行時是否可以獲得可靠的進度條(或只是需要多長時間的可靠資訊)updatedb

答案1

這不是一個有效的解決方案,但不像循環所有內容兩次那麼糟糕。

處理的檔案數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

答案2

不,不存在這樣的選項,也不應該有這樣的選項。

如果你需要測量它,你必須先知道你的系統上有多少文件,這意味著循環所有內容兩次,它可能會很慢

一個明顯的例子是,如果使用 提取核心原始碼file-roller,它比直接使用 提取核心原始碼要慢tar,因為 file-roller 需要先將所有檔案歸檔(否則進度條可能顯示不正確),然後您等待在提取過程實際開始之前。

相關內容