我的文件夹结构如下所示:
/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命令应该是什么样的?
答案 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