如何从ack(ack-grep)中排除特定的文件?

使用普通的grep命令有一个--exclude选项(这里详细介绍: 使用grep –exclude / – 包括语法不通过某些文件grep ),让你忽略特定的文件,当你grepping。

Ack的--type选项可以处理95%的你想要排除文件的情况,但是它不能处理排除特定文件的情况(据我所知)。 我有一个编译的JS文件,其中包含了其他每个JS文件的内容(在一行中),所以每次grep取回任何东西时,我都会得到这个巨大编译文件的全部内容。

我讨厌不得不放弃,并回到grep这个,但它真的很烦人。 请有人告诉我,有一种方法可以从acksearch中排除特定的文件。

不,ack 1.x不会让你排除单个文件。 在ack 2.0中 ,你可以。 ack 2.0 目前在其第一个alpha版本中是现在推荐的ack版本。

至于你的具体情况的缩小Javascript文件,你使用的是什么版本的答案? ack 1.96应该忽略基于扩展名的缩小的JavaScript。 如果扩展检查不起作用,那么你可能会自己去做,因为这是一个Perl程序。 你可以破解is_searchable函数。

在ack 2.0中,我们正在考虑忽略任何超过500个字符的行,因为它显然不是源代码。

您也可以join我们的ack-users邮件列表。 我们相当敏感。

要使用ack 2.0忽略单个文件,请为–ignore-file标志提供一个过滤规范:

--ignore-file=is:cljout.js

如果你运行ack --create-ackrc那么它会输出一大堆的预设,比如缩小的javascript,css和像node_modules和.git这样的目录。 很有用!

这里是缩小的js选项:

 # minified Javascript --ignore-file=match:/[.-]min[.]js$/ --ignore-file=match:/[.]js[.]min$ 

如果你想保存这个.ackrc运行

 ack --create-ackrc >> ~/.ackrc 

然后删除你不需要的文件。

用ack2.0也很好,如果你需要经常过滤文件,你可以在.ackrc文件中指定这些选项。