2010-10-12 21:41:12 +0000 2010-10-12 21:41:12 +0000
217
217

Recursivamente conte todos os ficheiros de uma directoria

Possivel Duplicata: Como posso contar o número de pastas numa drive usando Linux?

Eu tenho uma árvore de directórios realmente profunda na minha caixa Linux. Eu gostaria de contar todos os ficheiros nesse caminho, incluindo todos os subdirectórios.

Por exemplo, dada esta árvore de directórios:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

Se eu passar no /home, gostaria que ele devolvesse quatro ficheiros. Ou, pontos bónus se devolver quatro ficheiros e dois directórios. Basicamente, quero o equivalente a clicar com o botão direito do rato numa pasta no Windows e seleccionar propriedades e ver quantos ficheiros/pastas estão contidos nessa pasta.

Como posso fazer isto mais facilmente? Tenho uma solução que envolve um script Python que escrevi, mas porque não é tão fácil como correr o ls | wc ou semelhante?

Respostas (5)

364
364
364
2010-10-12 21:44:53 +0000

find . -type f | wc -l

Explicação: find . -type f encontra todos os ficheiros ( -type f* ) neste directório ( . ) e em todos os subdirectórios, os nomes dos ficheiros são então impressos de forma standard um por linha.

Isto é então canalizado | para wc (contagem de palavras) a opção -l diz à wc para contar apenas as linhas da sua entrada.

Juntos eles contam todos os seus ficheiros.

49
49
49
2011-03-28 22:00:38 +0000

As respostas acima já respondem à pergunta, mas vou acrescentar que se usar o find sem argumentos (excepto para a pasta onde quer que a pesquisa aconteça) como em:

find . | wc -l

a pesquisa vai muito mais rápida, quase instantânea, ou pelo menos para mim. Isto porque a cláusula de tipo tem de correr uma chamada ao sistema stat() em cada nome para verificar o seu tipo - omitindo-o evita fazê-lo.

Isto tem a diferença de devolver a contagem de ficheiros mais pastas em vez de apenas ficheiros, mas pelo menos para mim é suficiente uma vez que eu uso isto na maioria das vezes para encontrar que pastas têm enormes quantidades de ficheiros que demoram uma eternidade a copiar e comprimir. A contagem de pastas ainda me permite encontrar as pastas com a maioria dos ficheiros, preciso de mais velocidade do que precisão.

26
26
26
2010-10-12 21:56:03 +0000

Para ficheiros:

find -type f | wc -l

Para directórios:

find -mindepth 1 -type d | wc -l

Ambos trabalham no directório de trabalho actual.

8
8
8
2010-10-13 01:58:12 +0000

Com bash 4+

shopt -s globstar
for file in **/*
do
  if [-d "$file"];then
    ((d++))
  elif [-f "$file"];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

Não é necessário telefonar duas vezes se quiser pesquisar ficheiros e directórios

8
8
8
2010-10-13 14:26:17 +0000

Ligeira actualização para resposta aceite, se quiser uma contagem de dirs e tais

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn