Número de arquivos contendo uma determinada string

17

Como posso contar o número de arquivos (em um diretório) contendo uma determinada string como entrada em bash / sh?

    
por Starfish 29.01.2011 / 21:32

4 respostas

25

grep -l "string" * | wc -l procurará "string" no conteúdo de todos os arquivos no diretório de trabalho e informará quantos correspondências.

    
por 29.01.2011 / 22:02
9
O parâmetro grep s -l só emitirá os nomes dos arquivos que correspondem a $PATTERN , wc poderá contá-los posteriormente.

grep -l "$PATTERN" * | wc -l
    
por 29.01.2011 / 21:52
3
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *

Esclarecimento: Isso procura pelo número de arquivos que tem o "pattern_to_look_for" em seus conteúdos e não em seus nomes de arquivos (como a resposta de Wag). Da sua pergunta, é difícil dizer o que você está procurando.

    
por 29.01.2011 / 21:47
2

Isso funciona no Bash com qualquer nome do arquivo:

grep -lZ "$pattern" * | tr -cd '
grep -lZ "$pattern" * | tr -cd '%pre%0' | wc -c
0' | wc -c

Explicação:

  • A opção grep de -Z imprime todos os resultados com um separador de ␀ bytes. Esse caractere não pode fazer parte de um nome de arquivo, portanto, podemos simplesmente contar o número de separadores para obter o número de arquivos.
  • Para eliminar os outros caracteres na saída, simplesmente removemos tudo exceto os ␀ bytes usando tr .
  • Depois, basta contar os caracteres com wc .
por 10.01.2012 / 11:57