2016-11-13 9 views
2

Недавно я обнаружил извед и ack -ir --ignore-dir={node_modules,dist,.git} <search-term> работает отлично подходит для большинства вещей, но этоизведа | Grep | этажерка специальный игнорировать папки шаблона node_modules/реж/node_modules

---node_modules/ 
---------------project1/ 
-----------------------node_modules/ 
---------------project2/ 
-----------------------node_modules/ 

Я хотел бы найти все файлы в «корне» node_modules и исключая все внутренние.

Примечание: если я запустил find . -type f | ack -v 'node_modules|.git|dist' под корневой папкой node_modules, я получаю правильный список файлов. это происходит потому, что find . дает относительные пути. Любой способ подавать этот список?

ответ

3
ack -i <search-term> ./node_modules/* 

должно делать то, что вы хотите. Если вы хотите включить скрытые файлы и папки, установите shopt -s dotglob (предполагает Bash).


Справочная информация:

ack имеет много правил для игнорирования файлов, которые обычно не хотят искать построенный в.

По крайней мере версии 2.14, это включает каталоги с именем .git и node_modules на любом уровне иерархии (ack поиск рекурсивно по умолчанию, но вы можете добавить -r/-R/--recursive, чтобы сделать это явным).
Чтобы просмотреть полный список каталогов/файлов, которые по умолчанию игнорируются, запустите ack --dump.

С помощью глобирования (расширения имени пути), чтобы позволить оболочки расширить шаблон ./node_modules/* в список фактических элементы внутри./node_modules, правило игнорировать для node_modules обойдена для тех явно переданных элементов.