Como encontrar arquivos com determinado texto no Terminal


168

Eu gostaria de encontrar todos os arquivos que contêm uma determinada sequência de texto. Como você faria isso no terminal?


Se você deseja um resultado rápido, use o Spotlight. Além disso, se você deseja encontrar arquivos que não necessariamente armazenam texto diretamente no arquivo, como PDF ou ODF.
Joey

Um bom conselho, mas no meu caso, não tenho certeza se os arquivos estão indexados, pois estão em drivers de rede. E também são arquivos xml pertencentes a um programa específico.
Svish

Dê uma olhada em unix.stackexchange.com/a/37932/213832 esta solução funciona bem
boyd4715

Respostas:


280
grep -r 'text goes here' path_goes_here

11
Gostaria de sugerir um man greppara descobrir todas as opções maravilhosas de grep
Ludovic Kuty

Isso lista todos os arquivos existentes no caminho e acrescenta: No such file or directory Estou tentando obter apenas a lista de ocorrências de texto. Como podemos obter essa lista?
CP3O 01/06

7
Entendi: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

Mas isso retorna o conteúdo dos arquivos correspondentes, não os detalhes do arquivo (nome, caminho). A sugestão do @ CP3O funciona.
Geotheory

28

usar holofotes

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

não esqueça de olhar para:

man mdfind

2
Isso funcionará para arquivos que o Spotlight não indexa (ou seja, arquivos dentro de pastas ocultas, arquivos de configuração do sistema etc.)?
22813 Peter Berg

O Grep parece não analisar arquivos .xlsx, mas isso funcionou bem. Outro exemplo fácil: mdfind -onlyin. "searchtext"
FvD 02/09/2015

11
  1. Através do Ack

brew install ack ack "text goes here"

  1. Através de encontrar

find . |grep "text goes here"

  1. Através do grep

grep -RnslI "text goes here"


4

Você pode escolher uma das opções abaixo, dependendo do seu gosto e necessidades. Supondo que você precise procurar por arquivos que contenham texto - "assíncrono", recursivamente no diretório atual, você pode fazer isso de uma das seguintes maneiras:

Usando grep insira a descrição da imagem aqui

Usando ack insira a descrição da imagem aqui


2

A resposta de Ignacio é ótima e me ajudou a encontrar os arquivos que contêm determinado texto. O único problema que eu estava enfrentando era que, ao executar este comando, todos os arquivos seriam listados, incluindo um em que o padrão não aparecesse.

No such file or directory É o que vejo ao lado de arquivos que não contêm o padrão.

Se, em vez disso, você adicionar -sao comando, como em grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH DIRECTORY] -sfor usado, ele mostrará apenas quais arquivos contêm o padrão.

Da mesma forma, se grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -susado, ele imprime o arquivo mais o número da linha e a ocorrência do padrão.

Por favor, corrija-me se meu entendimento estiver errado.

Referência: Como posso o grep não imprimir erros 'Não existe esse arquivo ou diretório'?


Outra maneira de evitar esses incômodos erros desse arquivo é canalizar stderr para null. grep ... 2>/dev/null. Essa solução funciona para a maioria dos programas, pois eles relatam mensagens de erro no fluxo stderr, não no stdout. Eu já usei essa solução muitas vezes find, como dirá Permissão negada para muitos arquivos.
jpaugh

(1) Se você estiver recebendo No such file or directorymensagens para arquivos que existem, está fazendo algo errado ou seu sistema está com problemas. (2) O que [PATH OF PARENT]tem a ver com alguma coisa?
G-Man

@ G-Man eu editei a resposta para mostrar [PATH OF DIRECTORY]só meter alguém familiarizado queria saber por que eu tinha colocado./
CP3O

@ G-Man Estou usando um mac, não o Ubuntu, não tenho certeza de como meu sistema seria danificado, eu mal fiz nada ainda.
CP3O
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.