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 из папки приложения?
2 ответа
Этот ответ для версий Ack до 2, см. Этот ответ для версий Ack> = 2.
Первый игнорирует оба, потому что они оба имеют "данные" в качестве подкаталога и ack ищет подкаталоги по умолчанию. Таким образом, он будет игнорировать любой вложенный каталог с таким именем. К сожалению, ваш второй способ тоже не работает. Это работает для меня:
ack -a searchtext -G '^(?!.*secondary/data.*).*$'
Вместо -a для поиска всех файлов, смотрите ack-grep --help =types для поиска только определенных типов файлов, например --type =text
Старые версии 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
(От http://betterthangrep.com/Changes)
Вы можете проверить, какая версия у вас есть с --version
:
ack --version