Answers:
pv
在管道上运行(不是命令)-这是一种体积计,显示有多少数据经过管道中的给定点。
您的grep命令不是管道(|
- pipe operator
找不到位置)-它只是一个命令来执行任务。 pv
在这里不能为您提供帮助,您只需要相信grep
在所有输入文件上实际上正在执行此操作即可。
你可以凑齐与发现,PV,xargs的grep的和(共同的东西find . -name "*.rb" | pv | xargs grep [regex]
看起来像它可能是有前途的,但你必须告诉pv
该有多大find
的输出是它给有意义的结果。
坦白说,这似乎是值得的工作。只需运行您的grep,耐心等待,然后在完成后处理输出即可。
另外两种方法:
for file in *.rb; do echo $file; grep "string" $file >> output.txt; done
或者,在运行原始命令的其他外壳中,找到grep命令的pid,然后:
strace -q -s 256 -e trace=open -p [pid] 2>&1 | head
以上两个都将向您显示grep命令当前正在使用哪个文件。您可以通过以下方式找到文件总数:
ls -l *.rb | wc -l
最后,使用它来确定当前文件在列表中的编号:
ls -l *.rb | grep -n [the current filename]
PS我的答案假设所有文件都在一个目录中。如果不是,你将不得不使用find
,而不是ls
和*.rb
作为thinice建议。
在最新版本的中,pv
有一个"-d"
-Option来监视另一个进程的所有FD。
因此,从理论上讲,pv
它不仅可以充当管道,而且可以作为整个过程的进度指示器。(例如,使用Firefox的PID尝试一下)
对于上面的问题,以下是一个更简单的想法:grep
运行时,lsof
与一起使用watch
。
$ watch -n 1 "lsof | grep -n $PWD"
这样,您可以监视grep的进度。
你已经尝试过了吗
grep -R "string" *.rb | pv
我不知道它是否真的有效,因为它不知道要递归搜索多少总数据?
pv
将在grep的输出操作(所以即使他指定的整个输入大小pv
只能看到输出出来的管道的末端-这将是方式下计数字节