Como posso encontrar todos os arquivos em uma pasta com uma certa string de texto e uma extensão?

5

Estou usando o OS X.

Eu preciso encontrar arquivos em um diretório com a extensão .php e a string 41 em algum lugar no conteúdo do arquivo.

Eu tentei usar grep .

grep -R 41 *.php

No entanto, isso só pareceu encontrar arquivos no CWD e não em sub-diretórios.

Eu também tentei mexer com find .

Eu não consegui descobrir isso.

O que estou fazendo de errado?

    
por alex 31.05.2011 / 08:46

4 respostas

10

Você precisa de ambos.

find . -name '*.php' -type f -exec grep -q 41 {} \; -print
    
por 31.05.2011 / 08:55
1

para que o grep trabalhe recursivamente, o argumento para o grep precisa incluir os diretórios que se espera que ele possa reciclar.

olhando os arquivos a seguir

shiny:t fl$ find .
.
./evenmore
./evenmore/foo.php
./evenmore/inhere.php
./evenmore/no41in.php
./foo.php
./inhere.php
./morestuff
./morestuff/foo.php
./morestuff/inhere.php
./morestuff/no41in.php
./no41in.php
./stuff
./stuff/no41in.php

isso não funciona:

shiny:t fl$ grep -r 41 *.php
foo.php:41
inhere.php:41

porque após a expansão do nome do caminho, o shell processou o asterisco e a linha de comando agora

shiny:t fl$ set -x
shiny:t fl$ grep -r 41 *.php
+ grep -r 41 foo.php inhere.php no41in.php
foo.php:41
inhere.php:41

não há diretório para descer no argumento entregue ao grep. No entanto, isso irá descer em todos os diretórios presentes:

shiny:t fl$ grep -r 41 .
./evenmore/foo.php:41
./evenmore/inhere.php:41
./foo.php:41
./inhere.php:41
./morestuff/foo.php:41
./morestuff/inhere.php:41

se isso também processa diretórios ponto é deixado como um exercício para o leitor: -)

    
por 31.01.2013 / 02:11
1

Se você usar ack , poderá fazer ack 41 --php .

ack é como grep com realce interno e numeração de linhas e é projetado para pesquisar o código-fonte.

    
por 09.06.2011 / 15:57
0

Eu consegui usar

grep 41 **/*.php

e funcionou.

    
por 03.04.2016 / 23:33