55

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

/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 命令应该是什么样的?

4

2 回答 2

58

旧版本的 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
于 2012-02-07T02:37:43.310 回答
23

此答案适用于 2 之前的 Ack 版本,请参阅此答案以了解 Ack >=2 的版本

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

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

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

于 2010-05-09T23:49:55.603 回答