我有一个文件的目录层次结构(其中一些是纯文本,另一些是二进制)。
有没有一种简单的方法可以递归搜索文件和目录的层次结构以查找包含指定字符串的任何文件的名称,并在可能的情况下打印出“文件名路径和行号”的列表?
基本上,我想要的与下面的大致相同,除了可能还有一个打印行号的选项:
#!/bin/bash
#
# Recursively search files for pattern specified as argument.
#
pattern="$1"
if [ -z "$pattern" ]; then echo "$0: Unspecified pattern."; exit; fi
searchfiles () {
for filename in *; do
if [ -f "$filename" ]; then {
result=`/bin/grep -e "$pattern" "$filename"`
if ! [ -z "$result" ]; then echo "File: `pwd`/$filename"; fi
}
elif [ -d "$filename" ]; then
cd "$filename"
searchfiles
cd ..
fi
done
}
searchfiles
好的,如下所示,我可以使用递归 grep,但我只需要文件名和行号,因为如果有很多很长的行,那么打印其内容可能会很混乱,然后在打印时环绕终端,所以这里是我的解决方案:
grep -Rn index.php * | sed -e 's/ .*//g'
问候,
约翰·戈切
答案1
grep -Rn "your_string" *
应该可以奏效。