使用银色搜索器搜索文件和文件名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用银色搜索器搜索文件和文件名相关的知识,希望对你有一定的参考价值。
使用Silver Searcher,我该如何搜索:
- 带有单词或模式AND的(非二进制)文件
- 所有文件名,包含包含二进制文件文件名的单词或模式。
其他偏好:希望通过dotfiles进行不区分大小写的搜索和搜索。
尝试使用这个别名没有太多运气:
alias search="ag -g $1 --smart-case --hidden && ag --smart-case --hidden $1"
根据ag
的手册页
-G --file-search-regex PATTERN
Only search files whose names match PATTERN.
您可以使用-G
选项对匹配模式的文件执行搜索。
那么,回答你的问题:
root@apache107:~/rpm-4.12.0.1# ag -G cpio.c size
rpm2cpio.c
21: off_t payload_size;
73: /* Retrieve payload size and compression type. */
76: payload_size = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);
上面的命令在所有匹配模式size
的文件中搜索单词cpio.c
参考:
ag
版本0.28.0的手册页
注1:
如果您正在寻找某些文件类型中的字符串,比如所有C源代码,undocumented feature中有一个ag
可帮助您快速将搜索限制为某些文件类型。
以下命令都在所有php文件中查找foo
:
find . -name *.php -exec grep foo {}
ag --php foo
当find + grep
查找所有.php
文件时,--php
命令中的ag
开关实际上会查找以下文件扩展名:
.php .phpt .php3 .php4 .php5 .phtml
你可以使用--cpp
用于C ++源文件,--hh
用于.h
文件,--js
用于javascript等等。完整列表可以找到here
尝试将此添加到别名文件中。用zsh测试但应该使用bash。您在示例中遇到的问题是bash别名不能接受参数,因此您必须首先定义一个函数以使用参数,然后将您的别名分配给该函数。
searchfunction() {
echo $(ag -g $1 --hidden)
echo $(ag --hidden -l $1)
}
alias search=searchfunction
您可以通过几种方式修改此示例以适合您的目的,例如
- 添加/删除
-l
标志取决于您是否希望文本结果显示文本匹配或仅文件名 - 添加标题以分隔文本结果和文件名结果
- 重复数据删除结果以考虑在文件名和文本等方面都匹配的文件。
[编辑:根据Pablo Bianchi的评论删除不必要的--smart-case标志]
试试这个:
find . | ag "/.*SEARCHTERM[^/]*$"
命令find .
将列出所有文件。
我们将其输出传递给命令ag "/.*SEARCHTERM[^/]*$"
,如果它在文件名中,则匹配SEARCHTERM,而不仅仅是完整路径。
发现这个问题我自己寻找相同的答案。看起来ag
没有任何搜索文件和目录名称的本机功能。 Zach Fogg和Jikku Jose的上述答案都有效,但如果你在一个大目录中工作,那么管道find .
可能会很慢。
我建议直接使用find
,这比通过ag
管道更快:
Linux(find
的GNU版本)
find -name [pattern]
OSX(find
的BSD版本)
find [pattern]
如果你需要更多关于find
的帮助,来自Digital Ocean的this guide非常好。我包括这个因为find
的手册页非常密集,如果你只想弄清楚基本用法。
要添加到先前的答案,您可以使用"Or" Regular Expression在匹配不同文件扩展名的文件中进行搜索。
例如,只搜索C ++头文件[.hpp]和Makefile [.mk]中的字符串:
ag -G '.*.(hpp|mk)' my_string_to_search
在对mdfind
,find
,locate
以及其他尝试不满意之后,以下内容对我有用。它使用tree
获取文件的初始列表,使用ag
过滤掉目录,然后使用awk
自行打印匹配的文件。
我使用tree
结束了,因为它比我尝试的其他解决方案更快(更容易)配置并且速度很快。
这是鱼的功能:
function ff --description 'Find files matching given string'
tree . --prune --matchdirs -P "*$argv*" -I "webpack" -i -f --ignore-case -p |
ag '[[^d].*' |
awk '{print $2}'
end
这给出了类似于以下内容的输出:
~/temp/hello_world $ ff controller
./app/controllers/application_controller.rb
./config/initializers/application_controller_renderer.rb
~/temp/hello_world $
以上是关于使用银色搜索器搜索文件和文件名的主要内容,如果未能解决你的问题,请参考以下文章