updateb 中的进度条

stu*_*ent 9 locate

是否有可能在执行时获得可靠的进度条(或只是可靠的信息需要多长时间)updatedb

mus*_*usa 6

这不是一个有效的解决方案,但并不像循环遍历所有内容那么糟糕。

处理的文件数updatedb等于:

updatedb -v | wc -l
Run Code Online (Sandbox Code Playgroud)

或大致等于:

find / -mount | wc -l
Run Code Online (Sandbox Code Playgroud)

我们不能使用这些命令来获取数字,因为它会循环两次。

但是我们可以使用已使用的 inode 数量,大致相同:

df -i | grep '/$' | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)

有了这个值,我们就可以计算出updatedb -v命令运行的距离:

count=$(df -i | grep '/$' | awk '{print $3}')

sudo updatedb -v | while read
do
    printf "%3d\r" $((100 * (++i) / count))
done
Run Code Online (Sandbox Code Playgroud)

这是非常低效的,因为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
Run Code Online (Sandbox Code Playgroud)


dai*_*isy 5

不,没有这样的选择,也不应该有。

如果你需要测量它,你必须首先知道你的系统上有多少文件,这意味着循环遍历所有内容两次,它可能很慢

一个明显的例子是,如果你用 提取内核源代码file-roller,它比tar直接用 做同样的事情要慢,因为 file-roller 需要先归档所有文件(否则进度条可能会显示不正确),然后等待而在提取过程实际开始之前。