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