问题
有时,当我递归运行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>&1
让time
的stderr进入标准输出。
这不会报告每个目录的总时间。 这样做要么需要更高级的查找,找到grep -d
的叶目录,要么为每个路径添加一些累积时间,我会用perl -p
......但这也并非易事。