执行时是否可以获得可靠的进度条(或只是需要多长时间的可靠信息)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 需要先将所有文件归档(否则进度条可能显示不正确),然后您等待在提取过程实际开始之前。