我喜欢git grep搜索签入回购的所有文件.这很棒.但是可以使用它(或其他一些git命令)来查找文件(独立于内容)吗?
目前我这样做:
$ find . | grep middleware
Run Code Online (Sandbox Code Playgroud)
哪个有效,但它没有使用git索引,这意味着它会遍历每个找到的文件,并报告与之匹配的文件.gitignore.
任何聪明的技巧的想法?
ara*_*nid 44
也许你想要git ls-files哪个列出索引中的文件?(并自动调整git工作目录中的当前目录)
Ste*_*ven 23
我想git ls-files会为你做的伎俩.
所以:
git ls-files "*middleware*"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可能会考虑使用非 git 解决方案。
find本身有能力以更有效的方式做你想做的事情,而不是将结果输入grep:
find . -name 'middleware*'
Run Code Online (Sandbox Code Playgroud)
您将需要引用该模式,以便*在传递给find.
有一个功能强大的程序ack,它比 grep 更好,而我最喜欢的用途之一ack正是您提到的 —— 在树中查找与模式匹配的文件。ack不过,使用 perl regexp,而不是 shell fileglob。
ack -g middleware
Run Code Online (Sandbox Code Playgroud)
如果你想搜索中的那些文件,ack让你这样做更容易比在结果编写shell循环find是greps各自文件中。比较两者,看看你更喜欢哪一个:
for f in $(find . -name 'middleware*')
do
grep 'pattern in file' $f
done
Run Code Online (Sandbox Code Playgroud)
相对
ack -G 'middleware' 'pattern in file'
Run Code Online (Sandbox Code Playgroud)
我强烈建议ack将其添加到您的工具包中。