Como posso recursivamente percorrer vários diretórios de uma só vez?

0

Eu uso grep -r o tempo todo para encontrar ocorrências de uma string dentro de arquivos em um determinado diretório:

$ grep -r "string" app/assets/javascripts
> app/assets/javascripts/my_file.js: this line contains my string

Mas e se eu quiser pesquisar recursivamente por mais de um subdiretório do meu diretório atual? A única maneira que posso pensar é executar o grep duas vezes:

$ grep -r "string" app/assets/javascripts
> app/assets/javascripts/my_file.js: this line contains "string"
$ grep -r "string" spec/javascripts
> app/assets/javascripts/my_file.js: "string" appears here, too.

Como posso combinar os dois grep commans acima em uma única linha? Não quero pesquisar todos os arquivos em . , e --exclude-dir não é prático porque há muitos outros diretórios em . para excluir explicitamente todos eles.

Isso é possível?

    
por GMA 03.02.2015 / 14:22

1 resposta

2

Você pode especificar vários diretórios em grep :

grep -r "string" app/assets/javascripts spec/javascripts

Alternativamente - às vezes é mais útil listar arquivos para grep por find e, em seguida, grep-los, por exemplo

find app/assets/javascripts spec/javascripts -type f -print0 |
  xargs -0 grep "string"

ou

find app/assets/javascripts spec/javascripts -type f -exec grep -H "string" {} +
    
por 03.02.2015 / 14:39