我想grep除某些文件类型以外的所有文件吗?


36

如何递归grep给定文件夹中除几个文件类型以外的文件?

例如,我正在我的工作区文件夹中寻找一个字符串,但最终在sql文件中搜索并生成序列化的字符串。

因此,在这种情况下,我想要grep除sql文件以外的工作区文件夹。

如果可能的话,我最好在寻找单线。


5
请注意,Linux和Unix以及类unix-a-like确实没有您想要的“文件类型”。仅按照约定,文件名后缀为“ .c”,“。txt”或“ .sql”-这些后缀甚至不是Windows样式的“扩展名”,更不用说SQL,文本或C源代码存在的指示符在文件中。
Bruce Ediger '02

Answers:



8

这将为您做到这一点,并排除.sql和.txt文件:

find /some/dir -type f ! -name '*\.sql' ! -name '*.txt' -print0 | xargs -0 grep 'foobar'

但是,听起来ack将是您尝试做的更好的工具:

ack -a --nosql 'foobar' /some/dir

抱歉,我没有看到“ ack”部分并将其放入我的答案中,该答案现已删除。
2012年

另一个用户注意到其中ack - a --nobinary包括二进制文件
Michael Mrozek

文件名模式中不需要反斜杠。
库沙兰丹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.