Ответ 1
В этом случае вам нужно использовать find
вместо grep
.
Вы также можете использовать find
в комбинации с grep
или egrep
:
$ find | grep "f[[:alnum:]]\.frm"
grep используется для поиска в файле, чтобы увидеть, соответствует ли какая-либо строка данному регулярному выражению. Однако у меня есть такая ситуация - я хочу написать регулярное выражение, которое будет соответствовать самому имени файла (а не содержимому файла). Я запустил это из корневого каталога системы, чтобы найти все те файлы, которые соответствуют регулярному выражению.
Например, если я хочу найти все файлы формы VB, которые начинаются с "f" и заканчиваются на .frm, я буду использовать регулярное выражение -
"f[[:alnum:]]*\.frm"
Может ли grep сделать это? Если нет, есть ли утилита, которая позволила бы мне это сделать? Благодарю.
В этом случае вам нужно использовать find
вместо grep
.
Вы также можете использовать find
в комбинации с grep
или egrep
:
$ find | grep "f[[:alnum:]]\.frm"
Как сказал Пабло, вам нужно использовать find
вместо grep
, но нет необходимости в трубе find
до grep
. find
имеет встроенную функциональность:
find . -regex 'f[[:alnum:]]\.frm'
find
- очень мощная программа для поиска файлов по имени и поддерживает поиск по типу файла, ограничению глубины, объединению различных условий поиска с логическими операциями и выполнению произвольных команд на найденных файлах. Подробнее см. страницу поиска.
find -iname "file_name"
Syntax :-
find -type type_descriptor file_name_here
type_descriptor types: -
f: обычный файл
d: каталог
l: символическая ссылка
c: символьные устройства
b: блокировать устройства
Пример
find <path> -name *FileName*
Из руководства:
find -name pattern
База имени файла (путь с удаленными ведущими каталогами) соответствует шаблону шаблона оболочки. Поскольку ведущие каталоги удаляются, имена файлов, рассматриваемые для соответствия с именем, никогда не будут включая косую черту, так что "-name a/b" никогда не будет соответствовать чему-либо (вам, скорее всего, нужно будет использовать -path). метасимволы ( "*", "?" и "[]" ) соответствуют значению "." в начале базового имени (это изменение в поиске - Utils-4.2.2; см. раздел СТАНДАРТЫ СООТВЕТСТВИЯ ниже). Чтобы игнорировать каталог и файлы под ним, use -prune; см. пример в описании -path. Скобки не признаны как особые, несмотря на то, что некоторые оболочки, включая Bash imbue, скобки со специальным значением в шаблонах оболочки. Соответствие имени файла выполняется с использованием библиотечной функции fnmatch (3). Не забывайте заключить шаблон в кавычки, чтобы защитить его от расширения оболочкой.
Вы также можете сделать:
tree | grep filename
Это выводит команду дерева для grep для поиска. Это только скажет вам, существует ли файл.
tree -f | grep filename
findfile(){ tree -f | grep $1; } # $1 = filename, -f is full path