仅搜索grep

时间:2017-06-22 13:25:07

标签: bash grep

我今天发现了

git rev-parse --show-toplevel  && git ls-files

在gir存储库的top目录中搜索所有跟踪的文件。有没有办法让grep尊重它的输出,只搜索那些文件?

我试过

git rev-parse --show-toplevel  && git ls-files | grep -r "something" 

但在我的小测试中表明它的管道实际上并没有工作。它的行为与普通的grep命令相同。

我也试过(仅作为例子)

grep -r "something" --include=`git ls-files`

但我认为这只适用于单个文件,因为它没有显示所有可能的匹配

1 个答案:

答案 0 :(得分:1)

你的第一个断言是不正确的,因为这两个命令是彼此分开执行的(第二个命令只在第一个命令成功完成时执行)。

我想你首先想要的是:

git ls-files "$(git rev-parse --show-toplevel)"

这会将顶级目录作为参数传递给git ls-files

要查看某些内容的文件列表,可以使用xargs

git ls-files -z "$(git rev-parse --show-toplevel)" | xargs -0 grep 'something'

我已将-z开关添加到ls-files并将相应的-0切换到xargs,这样两个工具的输入/输出都使用空字节,这意味着尴尬的字符在文件名中不会导致任何问题。

我不认为-r开关在grep中做了任何有用的事情,因为ls-files的输出不包含任何目录(git只跟踪文件)。