Используя ack (иногда упакованный как ack-grep), я знаю, что я могу найти пути, содержащие определенную строку, используя: ack -g somestring
Но что, если я хочу только файлы, имеющие "somestring" в именах файлов?
Используя ack (иногда упакованный как ack-grep), я знаю, что я могу найти пути, содержащие определенную строку, используя: ack -g somestring
Но что, если я хочу только файлы, имеющие "somestring" в именах файлов?
Вы можете использовать утилиту find
. Что-то вроде этого:
find /path/to/look/in -name '*somestring*' -print
В некоторых системах, если вы опускаете путь, используется текущий каталог. В других системах вы не можете опустить его, просто используйте .
для текущего каталога.
Кроме того, прочитайте man find
для многих других опций.
Я согласен, что поиск - это путь, но вы также можете легко сделать это с помощью ack:
ack -f | ack "string"
Здесь "ack -f" рекурсивно перечисляет все файлы, которые он будет искать; перейдите к второй команде, чтобы выполнить поиск. ack -f имеет то преимущество, что пропускает бинарные файлы и каталоги даже без каких-либо дополнительных аргументов; часто, команда "find" может быть заменена гораздо более короткой командой "ack".
Если вы хотите использовать ack
для поиска всех файлов с somestring
в их базовом имени, просто добавьте [^/]*$
в регулярное выражение, например,
ack -g somestring[^/]*$
К сожалению, --color
покажет совпадение от somestring
до конца имени файла; но можно сделать то, что вы просили использовать ack
.
Я еще не могу прокомментировать, иначе я бы добавил это к ответу @dmedvinsky выше. Вы можете комбинировать свой подход с @whaley ответом на другой вопрос, чтобы отфильтровать .svn
файлы:
find /path/to/look/in -not -iwholename '*.svn*' -name '*somestring*' -print
это работает для меня, ack -all "somestring" , где as ack - all "somestring" будет искать все файлы, содержащие эту строку. ack "somestring" будет искать файлы только с этой строкой. если вы хотите добавить некоторый тип файла для поиска навсегда, как рубиновые файлы, или вы можете создать файл .ackrc в своем домашнем каталоге, добавьте строку -type-add = ruby =.haml,.rake,.rsel. Josh