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

ack|grep|whatnot special ignore folders pattern node_modules/dir/node_modules

我最近发现 ack 和 ack -ir --ignore-dir={node_modules,dist,.git} <search-term> 对大多数事情都很有效,但是这个

---node_modules/
---------------project1/
-----------------------node_modules/
---------------project2/
-----------------------node_modules/

我想搜索 "root" node_modules 下的所有文件并排除所有内部文件。

注意:如果我 运行 find . -type f | ack -v 'node_modules|.git|dist' 在根 node_modules 文件夹下,我会得到一个正确的文件列表。发生这种情况是因为 find . 给出了相对路径。有什么办法可以将此列表提供给 ack 吗?

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/* 扩展为 list of actual items inside ./node_modules, node_modules 的忽略规则是 bypassed 对于那些明确传递的项目。

node_modulesack 中的默认 --ignore-dir 列表中 javascript。

您可以使用 un-ignore node_modules 的 --noignore-dir 选项禁用此功能。

  • 直接在命令行:

    % ack --noignore-dir=node_modules -i <search-term>
    
  • 在您的 .ackrc 文件中:

    # in .ackrc
    --noignore-dir=node_modules
    

    影响所有搜索:

    % ack -i <search-term>