find . -type f |xargs grep string |awk -F":" '{print $1}' |uniq
上面的命令,它获取所有包含字符串“test”的文件名。但结果包括二进制文件。
问题是如何排除二进制文件。
谢谢大家。
如果我理解正确,您想获取目录中所有文件的名称及其包含 string 的子目录string
,不包括二进制文件。
阅读grep
的友好手册,我能够理解这一点:
-I Process a binary file as if it did not contain matching data;
this is equivalent to the --binary-files=without-match option.
惊人!
现在我如何摆脱find
. 这可能grep
吗?哦,下面两行,仍然在时髦的手册中,我读到了这个:
-R, -r, --recursive
Read all files under each directory, recursively; this is
equivalent to the -d recurse option.
这看起来很棒,不是吗?
只获取文件名怎么样?仍然在grep
有趣的手册中,我读到:
-l, --files-with-matches
Suppress normal output; instead print the name of each input
file from which output would normally have been printed. The
scanning will stop on the first match. (-l is specified by
POSIX.)
耶!我想我们已经完成了:
grep -IlR 'string' .
评论。
make me a sandwich
在手册中查找,但我的版本grep
似乎不支持。YMMV。man grep
。-R
和-I
开关并非在grep
. 如果您grep
拥有该make me a sandwich
选项,它很可能会支持-R
和-I
开关。YMMV。我使用的 Unix 版本不支持命令“grep -I/R”。
我尝试了命令:
file `find ./` | grep text | cut -d: -f1 | xargs grep "test"