ack:只排除一个目录,但保留所有其他目录

时间:2010-05-09 23:26:31

标签: ack

我的文件夹结构如下所示:

/app
/app/data
...
/app/secondary
/app/secondary/data

我想递归搜索/app,包括/app/data。但我不想搜索/app/secondary/data。这就是我到目前为止:

ack --ignore-dir=data searchtext
ack --ignore-dir=secondary/data searchtext

第一个命令忽略两个目录,第二个命令忽略它们。在app文件夹中,我的ack命令应该是什么样的?

2 个答案:

答案 0 :(得分:49)

旧版本的ack只能获取文件夹名称,而不是文件夹路径。从版本1.93_02开始,他们已将此功能添加到:

1.93_02     Wed Oct  6 21:39:58 CDT 2010
   [ENHANCEMENTS]
   The --ignore-dir option now can ignore entire paths relative
   to your current directory.  Thanks to Nick Hooey.  For example:

       ack --ignore-dir=t/subsystem/test-data

(来自betterthangrep.com/Changes

您可以使用--version检查您的版本:

ack --version

答案 1 :(得分:23)

此答案适用于2之前的Ack版本,请参阅This answer for versions of Ack >=2

第一个是忽略两者,因为它们都有'数据'作为子目录,ack默认搜索子目录。因此它将忽略具有该名称的任何子目录。不幸的是,你的第二种方式也不起作用。这对我有用:

ack -a searchtext -G '^(?!.*secondary/data.*).*$'

而不是-a搜索所有文件,请参阅ack-grep --help = types以仅搜索某些文件类型,例如--type = text