grep é usado para pesquisar em um arquivo para ver se alguma linha corresponde a uma determinada expressão regular. No entanto, eu tenho essa situação - quero escrever uma expressão regular que corresponda ao próprio nome do arquivo (e não ao conteúdo do arquivo). Vou executar isso no diretório raiz do sistema, para encontrar todos os arquivos que correspondem à expressão regular.
Por exemplo, se eu quiser encontrar todos os arquivos de formulário VB que começam com "f" e terminam com .frm, usarei a expressão regular -
"f[[:alnum:]]*\.frm"
O grep pode fazer isso? Caso contrário, existe algum utilitário que me permita fazer isso? Obrigado.
-regex
opçãoExemplo
Do manual:
padrão find -name
A base do nome do arquivo (o caminho com os diretórios principais removidos) corresponde ao padrão do padrão de shell. Como os diretórios principais são removidos, os nomes de arquivos considerados para uma correspondência com -name nunca incluirão uma barra, portanto, "-name a / b" nunca corresponderá a nada (você provavelmente precisará usar -path). Os metacaracteres ("*", "?" E "[]") correspondem a um "." no início do nome da base (esta é uma alteração nos achados utilitários-4.2.2; consulte a seção CONFORMIDADE PADRÕES abaixo). Para ignorar um diretório e os arquivos nele, use -prune; veja um exemplo na descrição de -path. Os aparelhos não são reconhecidos como especiais, apesar de algumas conchas, incluindo o Bash, atribuírem um significado especial aos padrões de conchas. A correspondência do nome do arquivo é realizada com o uso da função de biblioteca fnmatch (3). Não se esqueça de colocar o padrão entre aspas para protegê-lo da expansão pelo shell.
fonte
find . -maxdepth 1 -name "*filename*" -print
Como disse Pablo, você precisa usar
find
, em vez degrep
, mas não há nenhuma necessidade de tubulaçãofind
paragrep
.find
tem essa funcionalidade incorporada:find
é um programa muito poderoso para pesquisar arquivos por nome e suporta pesquisa por tipo de arquivo, limitação de profundidade, combinação de termos de pesquisa diferentes com operações booleanas e execução de comandos arbitrários nos arquivos encontrados. Consulte a página do manual find para obter mais informações.fonte
-mtime
e-mmin
Você pode encontrar o caminho completo de um arquivo usando grep, apenas canalize a saída da árvore
Aqui está uma função que você pode colocar no seu .bash_profile ou .bashrc
fonte
type_descriptor tipos: -
f: arquivo regular
diretório d:
l: link simbólico
c: dispositivos de caracteres
b: bloquear dispositivos
fonte
-type typedescriptor
sozinho. Isso é um erro?Você também pode fazer:
Isso canaliza a saída do comando tree para grep para uma pesquisa. Isso apenas informa se o arquivo existe.
fonte
Não, o grep funciona bem para isso:
fonte
-l
e-L
consideravelmente.Também para vários arquivos.
fonte
A maneira mais fácil é
aqui find listará todos os arquivos no diretório atual (.) ou seja, recursivamente. E então é apenas um grep simples. todos os arquivos cujo nome tem "teste" aparecerão.
você pode jogar com grep conforme sua exigência. Nota: Como o grep é uma classificação genérica de cadeias, pode resultar em fornecer não apenas nomes de arquivos. mas se um caminho tiver um diretório ('/xyz_test_123/other.txt') também chegará ao conjunto de resultados. Felicidades
fonte
./foo/bar/latest/fred.txt
.