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:
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:
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:
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 pesquisadasVamos 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
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.
Se você gosta desse tipo de ferramentas e dicas, confira nosso artigo sobre o RGA, que provê pesquisa de texto em PDFs, ebooks, documentos do Office, arquivos e mais. Também já cobrimos um artigo sobre como localizar arquivos modificados nos últimos n dias ou minutos usando find
e sobre como repetir um comando a cada n segundos no Linux.
Esse post foi traduzido do site LinuxUprising.com pela rtland.team.
Confira a versão original desse post em inglês:
How To Find All Files Containing Specific Text On Linux From The Command Line