ack: Исключая только один каталог, но сохраняющий всех других с тем же именем

Моя структура папок похожа на это:

/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

Первая команда игнорирует оба каталога, и второй не игнорирует ни одного из них. Из папки приложения, на что должна быть похожей моя команда ack?

48
задан mattalxndr 9 May 2010 в 12:26
поделиться

1 ответ

Этот ответ для версий Ack до 2, см. Этот ответ для версий Ack >=2.

Первый ответ игнорирует оба, потому что они оба имеют 'data' в качестве подкаталога, а ack ищет подкаталоги по умолчанию. Поэтому он будет игнорировать любой подкаталог с таким именем. К сожалению, ваш второй способ тоже не работает. У меня работает так:

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

Вместо -a для поиска всех файлов, смотрите ack-grep --help=types для поиска только определенных типов файлов, например --type=text

24
ответ дан 7 November 2019 в 12:35
поделиться