A maneira mais fácil parece ser find /path/to/search -ls | wc -l
O Find é usado para percorrer todos os arquivos e pastas.
-ls
para listar (imprimir) todos os nomes. Esse é um padrão e, se você deixar de fora, continuará funcionando da mesma forma em quase todos os sistemas. (Quase, já que alguns podem ter padrões diferentes). É um bom hábito usar explicitamente isso.
Se você apenas usar a find /path/to/search -ls
peça, ela imprimirá todos os arquivos e diretórios na sua tela.
wc
é contagem de palavras. a -l
opção diz para contar o número de linhas.
Você pode usá-lo de várias maneiras, por exemplo
- wc testfile
- arquivo de teste para gatos | banheiro
A primeira opção permite que o wc abra um arquivo e conte o número de linhas, palavras e caracteres nesse arquivo. A segunda opção faz o mesmo, mas sem o nome do arquivo, ele lê do 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órios e alimenta a saída para wc. Wc então conta o número de linhas.
(Uma outra alternativa seria `ls | wc ', mas encontrar é muito mais flexível e uma boa ferramenta para aprender.)
[Editar após o 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 /, exceto alguns que você não deseja pesquisar. Podemos acionar o comando anterior em cada um deles, produzindo uma soma de arquivos por pasta em /.
Contudo:
- Isso usa a extensão específica GNU -maxdepth.
Ele funcionará no Linux, mas não em qualquer unix-a-similar.
- Eu suspeito que você realmente pode querer um número de arquivos para cada subdiretório.