ack(ack-grep)忽略嵌套目录

时间:2014-12-07 16:03:08

标签: ubuntu grep ack

我有ubuntu 14.04。并使用ack-grep 2.12在目录中递归搜索文件中的文本

我想设置ack-grep选项 特定于目录〜/ workspace / project / 所以,当我在路径〜/工作区/项目,并做ack' mypattern' 它以递归方式在所有子目录和子目录中以及递归地搜索所有文件。并打印结果。此外,我有一些子目录和一些宏子目录,以忽略其中的所有文件。

目前我的文件.ackrc为〜/ workspace / project / .ackrc

我写的是

  --ignore-directory=is:node_modules/
  --ignore-directory=is:public/bower_compoenents/

现在,当我搜索ack-grep'你好' 它还会从.ackrc

中搜索我指示给IGNORE的所有目录

即使在.ackrc中使用此模式,它也会再次搜索被忽略的目录。 (PS:这在mac os x中完美运行[编辑:可能使用旧版本的ack])

  --ignore-dir=node_modules/
  --ignore-dir=public/bower_compoenents/
到目前为止,这些都没有起作用

--ignore-dir=public/bower_components --ignore-dir=is:public/bower_components

我做错了吗?

编辑:寻找解决方案忽略在嵌套目录中搜索。 (我不想在命令行上执行ack-grep时提供任何特殊选项)

2 个答案:

答案 0 :(得分:1)

引用ack 2.12 manual

  

- [no] ignore-dir = DIRNAME, - [no] ignore-directory = DIRNAME

     

忽略目录(因为忽略CVS,.svn等)。可以多次使用以忽略多个目录。例如,泥瓦匠用户可能希望包括--ignore-dir = data。 --noignore-dir选项允许用户搜索通常被忽略的目录(可能是为了研究.svn / props目录的内容)。

     

DIRNAME必须始终是一个简单的目录名称。不支持嵌套目录,如foo / bar。您需要指定--ignore-dir = foo,然后ack不会考虑来自任何foo目录的文件,除非在命令行中明确给出。

所以看起来你需要删除斜杠和嵌套目录。

你确定这适用于你的其他机器吗?该机器上有什么版本的ack?

答案 1 :(得分:1)

如果从“public”的父目录调用ack,则

--ignore-dir=public/bower_compoenents应该有效。但是,如果它是旧版本(早于1.93_02?),这在Ubuntu的ack版本中可能不起作用。下载更新的ack版本(我的是2.14)。

见这个帖子:

Ignoring sub-directories in .ackrc