A maneira mais fácil parece ser find /path/to/search -ls | wc -l
Find é usado para percorrer todos os arquivos e pastas.
-ls
para listar (imprimir) todos os nomes. Este é um padrão e, se você o deixar, continuará funcionando da mesma forma em quase todos os sistemas. (Quase, já que alguns podem ter padrões diferentes). É um bom hábito explicitamente usar isso.
Se você acabou de usar a parte find /path/to/search -ls
, ele imprimirá todos os arquivos e diretórios na tela.
wc
é contagem de palavras. a opção -l
diz para contar o número de linhas.
Você pode usá-lo de várias maneiras, por exemplo,
- wc testfile
- cat testfile | wc
A primeira opção permite abrir um arquivo e contar o número de linhas, palavras e caracteres naquele arquivo. A segunda opção faz o mesmo, mas sem o nome do arquivo, lê de stdin.
Você pode combinar comandos com um pipe |
. A saída do primeiro comando será canalizada para a entrada do segundo comando. Assim find /path/to/search -ls | wc -l
usa find para listar todos os arquivos e diretório e alimenta a saída para wc. Em seguida, conta o número de linhas.
(Uma outra alternativa teria sido 'ls | wc', mas é muito mais flexível e uma boa ferramenta para aprender.)
[Editar após comentário]
Pode ser útil combinar o find e o exec.
Por exemplo find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
listará todos os diretórios em /, barra alguns que você não deseja pesquisar. Podemos acionar o comando anterior em cada um deles, gerando uma soma de arquivos por pasta em /.
No entanto:
- Isso usa a extensão específica do GNU -maxdepth.
Ele funcionará no Linux, mas não em qualquer unix-a-like.
- Eu suspeito que você realmente queira um número de arquivos para cada subdiretório.