find . | xargs grep "Book" -sl | xargs grep -inw "Stars" -sl
这将返回包含单词" Book"的文件的文件名。和"明星"。 你如何修改它,以便你只能搜索* .txt文件? 还有办法指定搜索目录吗?
答案 0 :(得分:2)
locate /*txt | xargs grep -rl Book | xargs grep -rl Stars
就是这样。
更新:
如果要指定目录。举个例子:
/home/corbett/Documents
因此,
locate /home/corbett/Documents/*txt |xargs grep -rl Book |xargs grep -rl Stars
如果搜索不区分大小写,请对-i
cmd使用grep
选项:
locate /home/corbett/Documents/*txt |xargs grep -i -rl Book |xargs grep -i -rl Stars
找到与查找:
Find
对新文件更有效。 Locate
处理字符串数据库(文件路径)的速度最快答案 1 :(得分:1)
只需使用-iname
参数即可。它使find
搜索所有带扩展名为" .txt
"的文件(不区分大小写)。同时添加-type f
参数以确保您只搜索文件(这应该允许您删除-s"禁止错误"传递给grep
的参数)。
find . -iname "*.txt" -type f | xargs grep "Book" -sl | xargs grep -inw "Stars" -sl
您也可以使用-exec
参数。
find . -iname "*txt" -type f -exec grep "Book" -lZ {} \; | xargs -0 grep -inw "Stars" -l
-Z
的{{1}}参数和grep
的{{1}}参数可确保文件名从一个传输到另一个工作,即使它们中包含空格也是如此。