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

107

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

Джей Джей Бек
источник

Ответы:

195

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

find . -type f -name "*John*"
Рич Адамс
источник
1
Создание собственного сценария bash #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi позволит вам просто работать F search-stringкак идеальный ярлык
Илья Ростовцев
@IliaRostovtsev - приятно, но [ -z "$1" ]было бы немного лучше.
Джо
@ Джо А, верно. Вы имеете в виду, если в пути есть пробелы? Но здесь мы проверяем только наличие $ 1 пробела, чтобы появилось $ 2, и все. Вы имеете в виду, что это теоретически лучше?
Илья Ростовцев
@IliaRostovtsev - Вообще-то я ошибался. Если $ 1 равен нулю, тогда проверка становится if [ -z ]. Я думал, что это синтаксическая ошибка, но работает. С этого момента я могу упростить часть своего кода.
Джо
25

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

man -k <your search term>

Это позволяет перечислить все команды, в кратком описании которых есть ваш поисковый запрос. Обычно есть неплохой шанс, что вы найдете то, что вам нужно. ;)

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

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

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

man -k find | egrep '\([18]\)'
звон
источник
3
Мне любопытно ... вопрос, который не показывает попытки решить проблему с помощью поиска, получает одобрение, дружеское объяснение, как узнать о возможных командах, попадает. Какие критерии? :)
tink
1
я поддержал вас. урок состоит в том, что немногие могут это сделать. но мы можем посмотреть образцы и адаптироваться :)
tgkprog 02
2

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

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

locate "John"

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

Подробнее здесь: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab

Thucnguyen
источник
1

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

Анну
источник
Похоже, это также будет включать все пути, содержащие поисковый текст, а не только файлы: stackoverflow.com/questions/7698867/…
underscore_d
1

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

tree -f | grep filename
Caylus
источник