grep используется для поиска в файле, чтобы увидеть, соответствует ли какая-либо строка заданному регулярному выражению. Однако у меня такая ситуация - я хочу написать регулярное выражение, которое будет соответствовать самому имени файла (а не содержимому файла). Я запущу это из корневого каталога системы, чтобы найти все те файлы, которые соответствуют регулярному выражению.
Например, если я хочу найти все файлы форм VB, которые начинаются с «f» и заканчиваются на .frm, я буду использовать регулярное выражение -
"f[[:alnum:]]*\.frm"
Может ли grep это сделать? Если нет, есть ли утилита, которая позволила бы мне это сделать? Спасибо.
-regex
опцию.пример
Из руководства:
find -name шаблон
База имени файла (путь с удаленными ведущими каталогами) соответствует шаблону оболочки. Поскольку ведущие каталоги удаляются, имена файлов, рассматриваемые для сопоставления с -name, никогда не будут содержать косую черту, поэтому «-name a / b» никогда не будет соответствовать чему-либо (вам, вероятно, потребуется вместо этого использовать -path). Метасимволы («*», «?» И «[]») соответствуют «.» в начале базового имени (это изменение в find‐ utils-4.2.2; см. раздел «СООТВЕТСТВИЕ СТАНДАРТАМ» ниже). Чтобы игнорировать каталог и файлы в нем, используйте -prune; см. пример в описании -path. Фигурные скобки не считаются особенными, несмотря на то, что некоторые оболочки, включая Bash, наделяют фигурные скобки особым значением в шаблонах оболочки. Сопоставление имени файла выполняется с использованием библиотечной функции fnmatch (3). Не забудьте заключить шаблон в кавычки, чтобы защитить его от расширения оболочкой.
источник
find . -maxdepth 1 -name "*filename*" -print
Как сказал Пабло, вам нужно использовать
find
вместоgrep
, но нет никакой необходимости трубыfind
кgrep
.find
имеет встроенную функциональность:find
- очень мощная программа для поиска файлов по имени и поддерживает поиск по типу файла, ограничение глубины, комбинирование различных условий поиска с логическими операциями и выполнение произвольных команд для найденных файлов. См. Справочную страницу find для получения дополнительной информации.источник
-mtime
и-mmin
Вы можете найти полный путь к файлу с помощью grep, просто перенаправьте вывод дерева
Вот функция, которую вы можете поместить в свой .bash_profile или .bashrc
источник
type_descriptor типы: -
f: обычный файл
d: каталог
l: символическая ссылка
c: символьные устройства
b: блочные устройства
источник
-type typedescriptor
одного. Это ошибка?Вы также можете сделать:
Это направляет вывод команды tree в grep для поиска. Это только скажет вам, существует ли файл.
источник
Нет, для этого отлично подходит grep:
источник
-l
и-L
.Также для нескольких файлов.
источник
Самый простой способ
здесь find будет рекурсивно перечислить все файлы в (.), то есть в текущем каталоге. И тогда это просто grep. появятся все файлы с именем "test".
вы можете играть с grep в соответствии с вашими требованиями. Примечание. Поскольку grep является общей классификацией строк, она может дать вам не только имена файлов. но если в пути есть каталог ('/xyz_test_123/other.txt'), он также попадет в набор результатов. ура
источник
./foo/bar/latest/fred.txt
.