Как "grep" для имени файла вместо содержимого файла?


команда grep используется для поиска в файле, чтобы увидеть, если строка соответствует регулярному выражению. Однако у меня есть такая ситуация - я хочу написать регулярное выражение, которое будет соответствовать самому имени файла (а не содержимому файла). Я запустить из корневого каталога системы, чтобы найти все те файлы, которые соответствуют регулярному выражению.

например, если я хочу найти все файлы форм VB, которые начинаются с "f" и заканчиваются .frm, я буду использовать регулярное выражение -

   "f[[:alnum:]]*.frm"

может ли grep сделать это? Если нет, есть ли утилита, которая позволит мне это сделать? Спасибо.

7 97

7 ответов:

вы должны использовать find вместо grep в этом случае.

вы также можете использовать find в сочетании с grep или egrep:

$ find | grep "f[[:alnum:]]\.frm"

как сказал Пабло, вам нужно использовать find вместо grep, но нет необходимости трубы find to grep. 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 для поиска. Это только скажет вам, Существует ли файл, хотя.

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

tree -f | grep filename

вот функция, которую вы можете поместить в свой .bash_profile или .bashrc

findfile(){ tree -f | grep ; } #  = filename, -f is full path

нет, grep работает просто отлично для этого:

 grep -rl "filename" [starting point]

 grep -rL "not in filename"