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 需要先将所有文件归档(否则进度条可能显示不正确),然后您等待在提取过程实际开始之前。

相关内容