代码之家  ›  专栏  ›  技术社区  ›  mattalxndr

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

ack
  •  44
  • mattalxndr  · 技术社区  · 16 年前

    我的文件夹结构如下:

    /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 回复  |  直到 16 年前
        1
  •  23
  •   Community Mohan Dere    9 年前

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

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

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

    要搜索所有文件,请参见ack grep--help=types只搜索特定的文件类型,例如--type=text

        2
  •  49
  •   Erin Heyming    14 年前

    较旧版本的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
    
    推荐文章