Como você contaria cada ocorrência de um termo em todos os arquivos no diretório atual? - e subdiretórios (?)
Eu li que para fazer isso você usaria grep
; qual é o comando exato?
Além disso, é possível o acima com algum outro comando?
command-line
files
directory
grep
Diga-me o porquê
fonte
fonte
PCREs
não deve ser utilizado, uma vez que são experimentais-F
provavelmente seria mais rápido.-F
vez de-P
. Obrigado pela ótima sugestão, atualizando usando-F
, que realmente se encaixa melhor aqui.grep -Rc [term] *
vai fazer isso. O-R
sinalizador significa que você deseja pesquisar recursivamente o diretório atual e todos os seus subdiretórios. O*
é um seletor de arquivos que significa: todos os arquivos. O-c
sinalizador produzgrep
apenas o número de ocorrências. No entanto, se a palavra ocorrer várias vezes em uma única linha, ela será contada apenas uma vez.De
man grep
:Se você não possui links simbólicos no seu diretório, não há diferença.
fonte
-c
bandeira agrep
. Então o grep conta-se e você não precisa dowc
--
antes*
*
arquivo será expandido apenas para arquivos que não sejam dot-dot; portanto, você perderá todos eles. Faz mais sentido usar apenas "." já que você vai processar argumentos recursivamente de qualquer maneira - e isso obterá arquivos de ponto. O maior problema aqui é que isso pode ser o número de linhas, não o número de ocorrências de uma palavra. Se o termo aparecer várias vezes em uma linha, ele será contado apenas uma vez por "grep -c"Em um pequeno script python:
count_string.py
.Execute- o no diretório com o comando:
Notas
Explicação:
fonte
root
ef
para?root
é o caminho para o arquivo, incluindo "acima" o diretório atual,f
é o arquivo Como alternativa,os.path.join()
poderia ser usado, mas é mais detalhado.n = n + open(f).read().count(s)
?Como uma variante da boa resposta do @ kos, se você estiver interessado em especificar as contagens, poderá usar a
-c
opção grep para contar ocorrências:fonte