Como encontrar todos os arquivos que contêm um texto específico no Linux pela linha de comando

17 de novembro de 2021

Este artigo explica como encontrar todos os arquivos que contêm um texto específico no Linux. Para isso vamos usar grep, um programa Unix padrão.

Grep é um utilitário de linha de comando que imprime linhas que correspondem a um determinado padrão, e deve estar instalado por padrão.

Vamos começar simples. Digamos que você queira procurar a palavra texto (cuide as maiúsculas e minúsculas!) em todos os arquivos no diretório atual e seus subdiretórios. Para fazer isso, você precisa abrir o terminal, navegar até a pasta onde você deseja realizar a pesquisa, e executar:

Comandos para usar no terminal

grep -r 'texto'

Isso lista todos os arquivos na pasta atual e subpastas que contêm texto. Isto inclui strings como textos por exemplo, porque contém o nosso padrão de pesquisa, texto. -r significa recursivo, ler todos os arquivos no diretório e seus subdiretórios . Se você precisar seguir todos os links simbólicos, use -R vez de -r.

Se você só quer listar os nomes de arquivos que contenham a palavra inteira exata texto (em oposição à correspondência de palavra parcial padrão) e não coisas como textos, 123texto, e assim por diante, você precisa adicionar a opção -w (palavras inteiras) na linha de comando, assim:

Comandos para usar no terminal

grep -rw 'texto'

Se você não deseja procurar na pasta atual, mas em uma pasta específica, você pode especificar o caminho no qual grep deve olhar, adicionando-o no final do comando, assim:

Comandos para usar no terminal

grep -rw 'texto' /caminho/onde/pesquisar

Grep tem muitas opções, mas abaixo eu só vou listar algumas que você pode encontrar especialmente útil quando tenta encontrar todos os arquivos que contêm texto específico no Linux (além dos já mencionados acima):

  • -n mostra os números de linha. Quando for encontrada uma correspondência, além do caminho de arquivo em que foi encontrado, grep irá também exibir o número da linha em que o padrão foi encontrado
  • -i executa a busca sem considerar maiúsculas e minúsculas (por padrão ele considera maiúsculas e minúsculas). Dependendo do número de arquivos, isso pode retardar a busca, então leve isso em consideração quando usá-lo
  • --include=GLOB/--exclude=GLOB inclui ou exclui determinados arquivos
  • --exclude-dir=GLOB é usado para excluir pastas de ser pesquisadas

Vamos olhar um exemplo que combina esses sinalizadores de linha de comando. Vamos dizer que você quer encontrar todos os arquivos que contêm a maiúsculas e minúsculas (-i) texto na pasta ~/Documentos e suas subpastas, exceto para as subpastas Privado e Pessoal (--exclude-dir), e só procurar nos arquivos que têm as extensões .txt e .js (--include ). Além disso, você quer mostrar os números de linha (-n), pesquisar recursivamente e também seguir todos os links simbólicos (-R). Nesse caso, o comando que você precisaseria (este é um único comando):

saída

Comandos para usar no terminal

grep -Rni --exclude-dir={Privado,Pessoal} --include={*.txt,*.js} 'text' ~/Documentos

Example:

/home/logix/Documentos/teste/folder/file1.js:7:text
/home/logix/Documentos/teste/folder/file2.txt:7:text

Aqui, 7 é o número da linha na qual o padrão (texto) foi encontrado.

Para mais informações e uso avançado, consulte a página man do grep.

Você também pode querer dar uma olhada no ripgrep, uma ferramenta de pesquisa orientada para a linha que procura recursivamente o diretório atual para um padrão regex que vem com alguns recursos extras, e é muito rápido.

Esse post foi traduzido do site LinuxUprising.com pela rtland.team.

Linux Uprising Blog

Confira a versão original desse post em inglês:

How To Find All Files Containing Specific Text On Linux From The Command Line
Propaganda
Propaganda