使用 pv(管道查看器)的 Grep 进度条

Cyd*_*ia7 11 grep pv

我的计算机上有一个巨大的目录,我需要在里面的每个 ruby​​ 文件中搜索一个字符串。

我可以这样做:grep -R "string" *.rb但它需要很长时间,我想使用 pv(管道查看器)来显示进度条以便能够监控grep进度。

但是我真的不知道我该怎么写这个命令,因为这个命令还有一些我不明白的地方。

有人知道吗?

vor*_*aq7 15

pv管道上操作(不是命令)——它是一个体积计,显示有多少数据通过管道中的给定点。
您的 grep 命令不是管道(|-pipe operator无处可寻) - 它只是一个执行其操作的命令。 pv在这里帮不了你,你只需要相信它grep实际上对所有输入文件都在做它的事情。

可以用 find, pv, xargs & grep (find . -name "*.rb" | pv | xargs grep [regex]看起来可能很有希望,但你必须pv说明find输出有多大才能给出有意义的结果。

坦率地说,这似乎比它的价值更多的工作。只需运行您的 grep,耐心等待,并在完成后处理输出。


Lad*_*ada 5

另外两个方法:

for file in *.rb; do echo $file; grep "string" $file >> output.txt; done
Run Code Online (Sandbox Code Playgroud)

或者,在原始命令运行时在不同的 shell 中,找到 grep 命令的 pid,然后:

strace -q -s 256 -e trace=open -p [pid] 2>&1 | head
Run Code Online (Sandbox Code Playgroud)

上面两个都会显示 grep 命令当前正在处理哪个文件。您可以通过以下方式找到文件总数:

ls -l *.rb | wc -l
Run Code Online (Sandbox Code Playgroud)

最后,用它来确定当前文件在列表中的编号:

ls -l *.rb | grep -n [the current filename]
Run Code Online (Sandbox Code Playgroud)

PS 我的答案假设您的所有文件都位于一个目录中。如果不是,您将不得不find按照Thinice 的建议使用ls和。*.rb