Как я могу рекурсивно искать имена каталогов с определенной строкой, где строка является только частью имени каталога

73

Как я могу рекурсивно искать имена каталогов с определенной строкой, где строка является только частью имени каталога?

Например: имя каталога "8.0.3-99966_ru", но я хочу рекурсивно искать каталоги со строкой "99966".

Боб Перес
источник

Ответы:

95

Вы можете использовать findкоманду:

find YOUR_STARTING_DIRECTORY -type d -name "*99966*" -print

Пример:

find ~ -type d -name "*99966*" -print

должен найти все каталоги ( -type d), начиная с вашего домашнего каталога ( ~), чьи имена содержат строку «99966» ( -name "*99966*"), и вывести их ( -print).

lgarzo
источник
Как я могу исключить определенный каталог из поиска? Мне нужно искать /, но я получаю массу результатов / proc, которые меня не волнуют.
Козуч
@Kuzuch (через некоторое время!): Вы можете использовать отрицательный grep, добавив поиск в sinf в команду типа: найти <что угодно> | grep -v "/ proc", которая отфильтрует все строки, содержащие строку поиска.
Хуан Ланус
19

Чтобы избежать всех результатов «Отказано в доступе», вы можете использовать:

find / -type d -name "*99966*" -print 2>/dev/null

См. Эту статью на нулевом устройстве и эту на стандартных потоках для получения дополнительной информации.

Дэн Флетчер
источник
работает для меня :) ~
smatthewenglish
9

Вы можете перенаправить вывод в grepиметь его выделить имя каталога
что - то вроде

find / -type d | grep "directory name"

/Указывает на поиск по всему компьютеру

Collin
источник
@ Занна, ты прав, я отредактировал ответ. Спасибо за указание на это
Коллин
3

Простой способ сделать это - использовать find | egrep string. Если хитов слишком много, используйте -type dфлаг для поиска. Запустите команду в начале дерева каталогов, которое вы хотите найти, или вам также потребуется указать каталог в качестве аргумента find.

Другой способ сделать это - использовать ls -laR | egrep ^d.

И locateкоманда тоже пригодится:locate string

belacqua
источник