我的计算机上有一个巨大的目录,我需要在里面的每个 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,耐心等待,并在完成后处理输出。
另外两个方法:
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