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?

Svish
fonte
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
Ignacio Vazquez-Abrams
fonte
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
user46046
fonte
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"

Anant Gupta
fonte
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

karthiks
fonte
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'?

CP3O
fonte
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