Questão Como encontrar arquivos com determinado texto no Terminal


Eu gostaria de encontrar todos os arquivos que contenham uma certa seqüência de texto. Como você faria isso no Terminal?


123


origem


Se você quiser um resultado rápido, use o Spotlight. Além disso, se você quiser encontrar arquivos que não necessariamente armazenem texto diretamente no arquivo, como PDF ou ODF. - Joey
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 determinado programa. - Svish
Dê uma olhada unix.stackexchange.com/a/37932/213832 esta solução funciona bem - boyd4715


Respostas:


grep -r 'text goes here' path_goes_here

224



Eu sugeriria um man grep para descobrir todas as maravilhosas opções do grep - Ludovic Kuty
Isso lista todos os arquivos existentes no caminho e adiciona: No such file or directory  Eu estou tentando obter apenas a lista de ocorrências de texto. Como podemos obter essa lista? - CP3O
Consegui: grep -lr "text pattern" ./ -s ; grep -lr "text pattern" [PATH OF PARENT] -s - CP3O


use holofotes

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

não esqueça de olhar para:

man mdfind

23



Isso funcionará para arquivos que o Spotlight não indexa (ou seja, arquivos dentro de pastas ocultas, arquivos de configuração do sistema, etc.)? - Peter Berg
O Grep não parece analisar os arquivos .xlsx, mas isso funcionou bem. Outro exemplo fácil: mdfind -onlyin. "searchtext" - FvD


  1. Através de 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"


7





Você pode escolher uma das opções abaixo, dependendo do seu gosto e necessidades. Supondo que você precise procurar arquivos contendo texto - "async", recursivamente no diretório atual, você pode fazer isso de uma das formas abaixo:

Usando grep enter image description here

Usando ack enter image description here


1





A resposta de Ignacio é ótima e me ajudou a encontrar os arquivos contendo 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 Isto é o que eu vejo ao lado de arquivos que não contêm o padrão.

Se você adicionar -s para o comando, como em: grep -lr "text pattern" ./ -s ; grep -lr "text pattern" [PATH DIRECTORY] -s é 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] -s comando é usado 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 fazer com que o grep não imprima erros "Nenhum arquivo ou diretório"?


1



Outra maneira de evitar esses incômodos Arquivo inexistente erros, é 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 e não no stdout. Eu usei essa solução muitas vezes com findcomo vai dizer Permissão negada para muitos arquivos. - jpaugh
(1) Se você está recebendo No such file or directory mensagens de arquivos que existem, ou você está fazendo algo errado ou seu sistema está corrompido. (2) O que faz [PATH OF PARENT] tem a ver com alguma coisa? - G-Man
@ G-Man eu editei a resposta para mostrar [PATH OF DIRECTORY] apenas incase alguém desconhecido queria saber por que eu tinha colocado ./ - CP3O
@ G-Man Eu estou usando um mac não Ubuntu, não sei como meu sistema seria quebrado, eu mal fiz nada sobre isso ainda. - CP3O