Pesquisa recursiva de arquivos que contêm algum texto específico

4

Como eu recursivamente gero um arquivo de texto que tem uma lista de todos os arquivos no meu servidor que contêm uma string específica em qualquer lugar nos arquivos?

Eu sei que o seguinte comando pode ser usado para substituir uma string recursivamente

find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'

Eu não quero substituir a string, eu só quero uma lista de todos os arquivos que contenham a string.

    
por oshirowanen 18.01.2011 / 15:31

4 respostas

7

Use grep em vez de sed :

find /var/www -type f -print0 | xargs -0 grep -i 'old string'

Do jeito que você formula a pergunta, parece que você ainda não está muito familiarizado com grep . Leia mais sobre suas opções em seu tipo de página man: man grep em sua linha de comando.

atualize para responder ao comentário - tente adicionar a opção -l para mostrar apenas os nomes dos arquivos. O -i torna o caso de pesquisa insensível. O fácil de usar é com um único traço: grep -il

    
por 18.01.2011 / 15:38
4

Você também pode usar o grep sozinho sem encontrar:

grep -Rli 'old string' /var/www > list_of_files
    
por 18.01.2011 / 16:14
1

Você pode tentar adicionar o sinalizador -l ao comando para listar apenas os nomes dos arquivos

find /var/www -type f -print0 | xargs -0 grep -li 'old string'
    
por 18.01.2011 / 15:55
0

Experimente o ack - é mais rápido que o grep e suporta o perl regex.

ack -la <pattern> /var/www

Em alguns sistemas, esse pacote é chamado de "ack" e, às vezes, é chamado de "ack-grep".

    
por 04.03.2011 / 06:10