管道视图循环序列(向 While 或 For 循环添加进度条)- Bash

Pipe-view a loop sequence (add a progress bar to While or For loop) - Bash

here and here 所述,pipeviewer 是一种根据内容大小显示内容进度的工具。如那里所见,他们的问题的建议是在没有数据量的情况下获得进程的进度条运行。

我想知道是否可以使用 pipeviewer 显示循环的进度,考虑到我正在从文件中读取它,并且我知道它的大小。

我正在尝试

while IFS= read -r line; do <code> done < file.txt | pv

这绝对行不通,因为 pv 只显示一个空的进度条。

有什么想法吗?

提前致谢!

如果可以的话,用pv而不是cat读取文件,这样pv会自动获取文件大小并适当地格式化进度条。

例如:

pv very_big_file.txt

或者,在您的示例中:

pv file.txt | while IFS= read -r line;
do
    <code>
done

如果用pv无法读取文件,可以用-s size传递pv文件的大小。 这样,pv 将期望流程达到该长度,并按比例格式化进度条。

您可以通过以下方式获取文件的大小:

stat -c '%s' file

wc -c < file

例如:

command1 | command2 | ... | pv -s $(stat -c '%s' file) | commandX | ...

在你的例子中:

cat file.txt | pv -s $(stat -c '%s' file.txt) | while IFS= read -r line;
do
    <code>
done

如您所见,在 cat 之后使用 pv 是多余的,应该用 pv 读取文件来代替。