GEEKS

Como grep Pesquisar nomes de arquivos em vez de conteúdo no Linux

Como grep Pesquisar nomes de arquivos em vez de conteúdo no Linux

grep é uma ferramenta Linux geralmente usada para pesquisar arquivos de texto para conteúdo específico. No entanto, geralmente é útil pesquisar nomes de arquivos em diretórios em vez de conteúdos de arquivos, e isso pode ser feito com grep e outros utilitários de linha de comando do Linux



Usando to find em vez de grep

o grep O utilitário essencialmente recebe a entrada de string de arquivos ou entrada padrão e u.s.a. padrões ou Regex para pesquisar e imprimir linhas correspondentes.

Você pode usar tecnicamente grep sozinho para procurar nomes de arquivos em vez de conteúdo, mas é apenas porque o Linux permite caracteres curinga nas entradas de nome de arquivo. No entanto, você pode facilmente usar ls listar arquivos dessa maneira ou usar curingas em qualquer outro comando, e não é uma solução actual para pesquisar nomes de arquivos como grep pesquisa conteúdo.

grep "" ./record* -l

A verdadeira solução é usar o to find utilitário, que pode pesquisar em subdiretórios e fornece a maneira mais resiliente de pesquisar arquivos, pois interage diretamente com o sistema de arquivos. Este é o utilitário mais usado para pesquisar em diretórios e tem muitas opções, incluindo correspondência de padrões e suporte a Regex.

O uso mais básico é usar to find por conta própria para imprimir uma lista de arquivos, incluindo subdiretórios, e alimentar essa entrada para grep. Se você já tem scripts usando grepserá muito fácil convertê-los para corresponder dessa maneira.

to find | grep "record"

Você também pode usar padrões diretamente com to findeliminando a necessidade de grep. Usar -iname com uma entrada.

to find . -iname 'file_*.txt'

Diferente grep No entanto, o to find O comando é um pouco mais estrito – você precisa usar aspas simples ou duplas para escapar da string de pesquisa e usar curingas para corresponder à string inteira. Simplesmente encontrar uma substring no nome não é possível sem usar curingas para corresponder ao restante do nome.

Usando expressões regulares (Regex) com to find

Você também pode usar expressões regulares com to findque permite uma correspondência muito mais avançada:

to find . -regex './record.*'

Este regex corresponderá a todos os arquivos no diretório atual começando com “arquivo”. No entanto, é importante estar ciente de que isso funciona de maneira diferente do que -iname; a entrada inclui o caminho completo do diretório e deve usar ./ para escapar do caminho relativo, ./.

Este comando mostrado aqui está excluindo o ./subdirectory/ pasta, porque não começa com “arquivo”. Para corrigir isso, você deve combinar tudo que leva à barra ultimate com .*/:

to find . -regex '.*/record.*'

Expressões regulares são altamente complicadas, mas muito poderosas. Se você quiser saber mais, leia nosso guia sobre como eles funcionam.

RELACIONADO: Como você realmente u.s.a. Regex?



Fonte da Notícia: www.howtogeek.com

Artigos relacionados

Botão Voltar ao topo