Linux находит имена файлов с заданной строкой

Я на Ubuntu, и мне бы хотелось найти все файлы в текущем каталоге и подкаталогах, чье имя содержит строку "Джон". Я знаю, что grep может соответствовать содержимому в файлах, но я понятия не имею, как использовать его с именами файлов. Любая помощь будет оценена.

Ответ 1

Используйте команду find,

find . -type f -name "*John*"

Ответ 2

Правильный ответ уже поставлен, но для того, чтобы узнать, как помочь себе, я подумал, что я бы выбрал что-то полезное по-другому; если вы можете подытожить то, что вы пытаетесь достичь одним словом, в Linux есть мощная функция справки.

man -k <your search term>

Что это значит, это перечислить все команды, в которых есть поисковый запрос в кратком описании. Как правило, довольно хороший шанс, что вы найдете то, что вам нужно.;)

Этот вывод иногда может быть несколько подавляющим, и я бы рекомендовал сузить его до исполняемых файлов, а не всех доступных man-страниц, например:

man -k find | egrep '\(1\)'

или, если вы также хотите искать команды, требующие более высоких уровней привилегий, например:

man -k find | egrep '\([18]\)'

Ответ 3

используйте ack свой простой. просто введите ack <string to be searched>

Ответ 4

Команда find займет много времени, так как она сканирует реальные файлы в файловой системе.

Самый быстрый способ - использовать команду locate, которая немедленно даст результат:

locate "John"

Если команда не найдена, вам нужно сначала установить пакет mlocate и запустить команду updatedb, чтобы подготовить базу данных поиска в первый раз.

Подробнее здесь: http://itblog.study.land/the-fastest-way-to-find-files-by-filename-mlocate-locate-and-updatedb-commands-2/

Ответ 5

Это очень простое решение с помощью команды tree в каталоге, который вы хотите найти. -f показывает полный путь к файлу, а | используется для передачи вывода дерева в grep, чтобы найти файл, содержащий строку filename в имени.

tree -f | grep filename