Можно ли найти файлы только на основе имени файла?

Используя ack (иногда упакованный как ack-grep), я знаю, что я могу найти пути, содержащие определенную строку, используя:
ack -g somestring

Но что, если я хочу только файлы, имеющие "somestring" в именах файлов?

Ответ 1

Вы можете использовать утилиту find. Что-то вроде этого:

find /path/to/look/in -name '*somestring*' -print

В некоторых системах, если вы опускаете путь, используется текущий каталог. В других системах вы не можете опустить его, просто используйте . для текущего каталога.

Кроме того, прочитайте man find для многих других опций.

Ответ 2

Я согласен, что поиск - это путь, но вы также можете легко сделать это с помощью ack:

ack -f | ack "string"

Здесь "ack -f" рекурсивно перечисляет все файлы, которые он будет искать; перейдите к второй команде, чтобы выполнить поиск. ack -f имеет то преимущество, что пропускает бинарные файлы и каталоги даже без каких-либо дополнительных аргументов; часто, команда "find" может быть заменена гораздо более короткой командой "ack".

Ответ 3

Если вы хотите использовать ack для поиска всех файлов с somestring в их базовом имени, просто добавьте [^/]*$ в регулярное выражение, например,

ack -g somestring[^/]*$

К сожалению, --color покажет совпадение от somestring до конца имени файла; но можно сделать то, что вы просили использовать ack.

Ответ 4

Я еще не могу прокомментировать, иначе я бы добавил это к ответу @dmedvinsky выше. Вы можете комбинировать свой подход с @whaley ответом на другой вопрос, чтобы отфильтровать .svn файлы:

find /path/to/look/in -not -iwholename '*.svn*' -name '*somestring*' -print

Ответ 5

это работает для меня, ack -all "somestring" , где as ack - all "somestring" будет искать все файлы, содержащие эту строку. ack "somestring" будет искать файлы только с этой строкой. если вы хотите добавить некоторый тип файла для поиска навсегда, как рубиновые файлы, или вы можете создать файл .ackrc в своем домашнем каталоге, добавьте строку -type-add = ruby ​​=.haml,.rake,.rsel. Josh