find . -type f |xargs grep string |awk -F":" '{print $1}' |uniq
上面的命令,它获取包含字符串“test”的所有文件名。但结果包括 二进制文件。
问题是如何排除二进制文件。
谢谢大家。
答案 0 :(得分:3)
如果我理解正确,您希望获取目录及其子目录中包含字符串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。答案 1 :(得分:0)
我使用的Unix版本不支持命令&#34; grep -I / R&#34;。
我尝试了命令:
file `find ./` | grep text | cut -d: -f1 | xargs grep "test"