我最近发现了ack,ack -ir --ignore-dir={node_modules,dist,.git} <search-term>
对大多数事情都很有用,但是这个
---node_modules/
---------------project1/
-----------------------node_modules/
---------------project2/
-----------------------node_modules/
我想搜索“root”node_modules下的所有文件,并排除所有内部文件。
注意:如果我在根node_modules文件夹下运行find . -type f | ack -v 'node_modules|.git|dist'
,我会得到一个合适的文件列表。发生这种情况是因为find .
给出了相对路径。有什么方法可以把这个列表提供给ack吗?
答案 0 :(得分:5)
ack -i <search-term> ./node_modules/*
应该做你想做的事。
如果您还要包含隐藏文件和文件夹,请先设置shopt -s dotglob
(假定为Bash)。
背景资料:
ack
有许多规则可以忽略您通常不想在内置中搜索的文件。
至少从版本2.14开始,此包含名为.git
和node_modules
的目录,在层次结构的任何级别(ack
默认递归搜索,虽然您可以添加-r
/ -R
/ --recursive
来明确表示。)
要查看默认情况下忽略的目录/文件的完整列表,请运行ack --dump
。
使用 globbing (路径名扩展)让 shell 将模式./node_modules/*
扩展为实际项目的列表 在 ./node_modules
内,对于那些明确传递的项目,node_modules
的忽略规则被绕过。
答案 1 :(得分:2)
node_modules
在JavaScript的--ignore-dir
的默认ack
列表中。
您可以使用--noignore-dir
选项禁用此功能,以取消忽略node_modules。
直接在命令行上:
% ack --noignore-dir=node_modules -i <search-term>
在您的.ackrc
文件中:
# in .ackrc
--noignore-dir=node_modules
这会影响所有搜索:
% ack -i <search-term>