Как "grep" для имени файла вместо содержимого файла?
команда grep используется для поиска в файле, чтобы увидеть, если строка соответствует регулярному выражению. Однако у меня есть такая ситуация - я хочу написать регулярное выражение, которое будет соответствовать самому имени файла (а не содержимому файла). Я запустить из корневого каталога системы, чтобы найти все те файлы, которые соответствуют регулярному выражению.
например, если я хочу найти все файлы форм VB, которые начинаются с "f" и заканчиваются .frm, я буду использовать регулярное выражение -
"f[[:alnum:]]*.frm"
может ли grep сделать это? Если нет, есть ли утилита, которая позволит мне это сделать? Спасибо.
7 ответов:
вы должны использовать
find
вместоgrep
в этом случае.вы также можете использовать
find
в сочетании сgrep
илиegrep
:$ find | grep "f[[:alnum:]]\.frm"
как сказал Пабло, вам нужно использовать
find
вместоgrep
, но нет необходимости трубыfind
togrep
.find
имеет встроенную функциональность:find . -regex 'f[[:alnum:]]\.frm'
find
это очень мощная программа для поиска файлов по имени и поддерживает поиск по типу файла, ограничение глубины, объединение различных поисковых терминов с логическими операциями и выполнение произвольных команд на найденных файлах. Смотрите найти человека страницы для получения дополнительной информации.
пример
find <path> -name *FileName*
из мануала:
найти имя pattern
база имени файла (путь с удаленными ведущими каталогами) соответствует шаблону оболочки. Поскольку ведущие каталоги удаляются, имена файлов, рассматриваемые для соответствия с-name, никогда не будут включите косую черту, поэтому "-name a/b" никогда не будет соответствовать чему-либо (вам, вероятно, нужно использовать-path вместо этого). Этот метасимволы ("*", "?"и "[]") матч "."в начале имени (это изменение в Найти‐ utils-4.2.2; см. раздел соответствие стандартам ниже). Игнорировать каталог и файлы под ним, используйте-prune; см. пример в описании-path. Брекеты не признаются специальными, несмотря на то, что некоторые оболочки, включая Bash, наполняют фигурные скобки особым значением в шаблонах оболочек. Сопоставление имени файла выполняется с помощью функции библиотеки fnmatch(3). Не забудьте заключите паттерн в кавычки, чтобы защитить его от расширения оболочкой.
find -iname "file_name" Syntax :- find -type type_descriptor file_name_here
type_descriptor типов:-
f: обычный файл
д: каталог
l: символическая ссылка
c: символьные устройства
b: блокировать устройства
вы также можете сделать:
tree | grep filename
Это передает выходные данные команды дерева в grep для поиска. Это только скажет вам, Существует ли файл, хотя.