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