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


Como faço recursivamente gerar um arquivo de texto que tem uma lista de todos os arquivos no meu servidor que contêm uma seqüência 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 contêm a string.


4


origem


Para um usuário do windows eu teria sugerido para escrever um arquivo em lotes que salva a saída para um arquivo e colocá-lo no agendador. Tente o que quer que seja o substituto do Linux para esse processo - Shekhar


Respostas:


Usar grep ao invés 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á familiarizado grep. Leia mais sobre suas opções em seu tipo de página man: man grep na sua linha de comando.

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


7



Isso não parece me dar apenas os caminhos / arquivos que contêm a string que estou procurando. Por alguma razão, também estou recebendo o texto dos arquivos pesquisados ​​também. - oshirowanen
Adicionado pouco sobre -l - Doug Harris


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

grep -Rli 'old string' /var/www > list_of_files

4





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'

1





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

ack -la <pattern> /var/www

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


0