regexack

ack: Exclude specific directories from search via regex


How do I ignore specific directories via RegEx with ack?

I can use the --ignore-dir option, but this does not let me specify a RegEx. I want to be able to ignore any directory, which has the words test or tests or more complicated patterns in its name.

I also tried a negative lookbehind via

ack -G '(?<!test)' pattern

but this does not work. It does not exclude the test directories.


Solution

  • Use the undocumented option "--invert-file-match" (ack version on my system: 1.96):

    $ ack pattern -G 'test|tests' --invert-file-match
    

    Well, it is sort of documented:

    $ ack --help|grep invert
    -v, --invert-match    Invert match: select non-matching lines
    --invert-file-match   Print/search handle files that do not match -g/-G.
    

    It is not documented in its perldoc.