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

  • 本文关键字:ack 排除 文件 grep ack
  • 更新时间 :
  • 英文 :


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

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

我不想因为这件事而放弃ack,回到grep,但这真的很烦人。有人告诉我,有一种方法可以从ack搜索中排除特定的文件。

要使用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$

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

--ignore-directory=is:foo

如果您想将其保存到.ackrc,请运行

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

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

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

否,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用户邮件列表。我们反应很快。

同样值得一提的是,使用ack2.0,如果必须经常过滤文件,可以在.ackrc文件中指定这些选项。

如果您想排除特定的文件夹,以下命令可能会帮助您:

ack keywords --ignore-dir folder_name

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

--[no]忽略dir=DIRNAME,--[no]忽视directory=DIRNAME

--ignore file=FILTERTYPE:FILTERGS

最新更新