grep - 在递归搜索中显示当前目录/文件



问题

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

有没有办法告诉 grep 在此类搜索中正在扫描的当前路径目录/文件?

我的尝试

我试图在这里搜索,但找不到一些东西,因为通常关键字current directory用于其他原因,因此存在相互矛盾的术语。

我也尝试过这样的事情:

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

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

编辑:我刚刚在这里找到了一个有用的答案,这是一个不同的问题,但我想如果我通过在for循环中的某处添加一个echo命令来修改以下代码,它可能会起作用,尽管我也刚刚意识到它需要 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的stderr进入标准输出。

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

最新更新