С ACK 2.x я могу указать параметры командной строки, чтобы исключить определенные каталоги из результатов. . Например, чтобы исключить каталог 'test' я могу использовать:
ack -v -g 'test' | ack -x pattern
('test' может быть регулярным выражением для исключения каталогов)
Я также могу игнорировать каталог, используя .ackrc, добавляя --ignore-dir=save.d
к .ackrc или используя его как параметр командной строки. Но кажется, что я не могу исключить пути (каталог и его подкаталоги) с помощью RegEx. Я попытался добавить следующее:
--ignore-dir=match:^\/specific\/path\/to\/test\/.*$
а также следующие варианты
--ignore-dir=match:/^\/specific\/path\/to\/test\/.*$/
--ignore-dir=match:\/specific\/path\/to\/test\/.*
--ignore-dir=match:/specific/path/to/test/.*
--ignore-dir=match:/specific/path/to/test/
(согласно этому пользователю, --ignore-dir и --ignore- файл, и действительно, все сопоставления файлов в ack выполняются с помощью регулярных выражений, не с шаблонами шаблонов оболочки, но я также пытался использовать шаблоны шаблонов оболочки.)
но это дает мне:
Non-is filters are not yet supported for --ignore-dir at /usr/bin/ack line 157
Удаление части "match:" из приведенных выше вариантов не приводит к ошибке, но не исключает и каталоги.
В руководстве говорится, что "вложенные каталоги, такие как foo/bar, НЕ поддерживаются ". Чтобы решить эту проблему, в ACK по крайней мере до ACK 2.12 невозможно исключить определенные каталоги и подкаталоги. Исключить можно только все пути, каталог которых соответствует простой строке или регулярному выражению. Или есть недокументированный хитрый способ обойти это ограничение?