60

使用普通grep命令有一个--exclude选项(此处详细介绍:使用 grep --exclude/--include 语法不通过某些文件 grep)可以让您在 grep 时忽略特定文件。

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

我不想不得不放弃 ack 并为此返回 grep ,但这真的很烦人。拜托,有人告诉我有一种方法可以从 ack 搜索中排除特定文件。

4

5 回答 5

115

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

--ignore-file=is:cljout.js

于 2013-06-14T02:07:09.487 回答
23

如果你运行ack --create-ackrc它,它将输出一大堆常用文件的预设,如缩小的 javascript、css 和 node_modules 和 .git 等目录。很有用!

这是缩小的 js 选项:

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

以下是如何忽略名为 foo 的目录:

--ignore-directory=is:foo

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

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

然后从该文件中删除您不需要的内容。

此外,您可以在项目的根文件夹中为项目特定的内容创建另一个.ackrc文件。我把它放进去,.gitignore这样它就不会弄乱repo。

于 2017-06-30T03:28:20.047 回答
15

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

至于您的缩小 Javascript 文件的具体情况,您使用的是什么版本的 ack?ack 1.96 应该忽略基于扩展的缩小 JavaScript。如果扩展检查不起作用,您可能会自行破解 ack,因为它是一个单独的 Perl 程序。您可以破解该is_searchable功能。

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

您可能还想加入我们的ack-users邮件列表。我们反应灵敏。

于 2012-07-24T21:32:05.307 回答
2

也很高兴知道 ack2.0,如果您必须经常过滤文件,您可以在.ackrc文件中指定这些选项。

于 2016-06-27T22:27:13.817 回答
2

如果要排除特定文件夹,以下命令可能会对您有所帮助:

ack keywords --ignore-dir folder_name

man ack将提供更多详细信息:)

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

--ignore-file=FILTERTYPE:FILTERARGS

于 2018-05-13T13:17:26.923 回答