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

时间:2016-11-13 03:59:56

标签: node.js grep node-modules ack

我最近发现了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吗?

2 个答案:

答案 0 :(得分:5)

ack -i <search-term> ./node_modules/*

应该做你想做的事。 如果您还要包含隐藏文件和文件夹,请先设置shopt -s dotglob(假定为Bash)。

背景资料:

ack有许多规则可以忽略您通常不想在内置中搜索的文件。

至少从版本2.14开始,此包含名为.gitnode_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>