Grep - 在递归搜索中显示当前 directory/file

Grep - showing current directory/file in a recursive search

问题

有时,当我 运行 递归地使用 grep 工具时,它会卡在一些大目录或一些大文件中,我想查看目录或文件名,因为也许我可能意识到下次我出于类似目的使用 grep 时不需要扫描特定的 directory/file,因此将其与相应的 grep 选项一起排除。

有没有办法告诉 grep 在此类搜索中正在扫描的当前路径 directory/file?

我的尝试

我试图在这里搜索,但找不到任何东西,因为通常关键字 current directory 用于其他原因,因此存在术语冲突。

我也试过类似的东西:

man grep | grep -i current
man grep | grep -i status

(和许多其他人)到目前为止没有成功。

编辑:我刚刚找到了一个有用的答案,它针对的是另一个问题,但我想如果我通过在某处添加 echo 命令修改以下代码,它可能会起作用for 循环,虽然我也刚刚意识到它需要 bash 4 可悲的是我有 bash 3.

# Requires bash 4 and Gnu grep
shopt -s globstar
files=(**)
total=${#files[@]}
for ((i=0; i<total; i+=100)); do
  echo $i/$total >>/dev/stderr
  grep -d skip -e "$pattern" "${files[@]:i:100}" >>results.txt
done

find . -type f -exec echo grepping {} \; -exec time grep pattern {} \; 2>&1

  • find . -type f 递归查找所有文件。
  • -exec echo grepping {}调出每个文件
  • -exec time grep ... {} 报告每个 grep 花费的时间
  • 2>&1time 的标准错误输出到标准输出。

这不会报告每个目录的总时间。这样做要么需要更高级的查找,找到 grep -d 的叶目录,要么为每个路径添加一些累积时间,我会用 perl -p... 但这也很重要。