ack | grep | whatnot特殊忽略文件夹模式node_modules/dir/node_modules

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吗?

mkl*_*nt0 6

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


spa*_*azm 6

node_modules位于javascript 的默认--ignore-dir列表中。ack

--noignore-dir您可以使用取消忽略 node_modules 选项来禁用此功能。