Como posso contar o número de arquivos (em um diretório) que contêm uma determinada string como entrada no bash / sh?
Como posso contar o número de arquivos (em um diretório) que contêm uma determinada string como entrada no bash / sh?
Respostas:
grep -l "string" * | wc -l
procurará por "string" no conteúdo de todos os arquivos no diretório ativo e informará quantas correspondências.
grep -lr "string" directory | wc -l
se você não deseja pesquisa recursiva, pode usar a opção find com maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
Observe que esta segunda opção é mais lenta que o grep.
grep
O parâmetro s -l
produzirá apenas os nomes de arquivos correspondentes $PATTERN
, wc
podendo contá-los posteriormente.
grep -l "$PATTERN" * | wc -l
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Esclarecimento: procura o número de arquivos que possuem o "padrão_para_um_ aspeto" em seu conteúdo e não em seus nomes de arquivo (como a resposta de Wag). Da sua pergunta, é difícil dizer o que você está procurando.
find . ! -name . -prune -type f
(não perca os backticks). Este comando lista apenas os arquivos na pasta.
Isso funciona no Bash com qualquer nome de arquivo:
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Explicação:
grep
A -Z
opção 's' imprime todos os resultados com um separador de by 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.tr
.wc
.