我的文件夹结构如下所示:
/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 之前的 Ack 版本,请参阅 This answer for versions of Ack >=2 。
第一个忽略两者,因为它们都将“数据”作为子目录,并且默认情况下 ack 搜索子目录。因此它将忽略具有该名称的任何子目录。不幸的是,您的第二种方法也不起作用。这对我有用:
ack -a searchtext -G '^(?!.*secondary/data.*).*$'
而不是 -a 搜索所有文件,请参阅 ack-grep --help=types 仅搜索某些文件类型,例如 --type=text
关于ack:只排除一个目录,但保留所有其他同名目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2799570/