Possível duplicado:
como posso contar o número de pastas em uma unidade usando o Linux?
Eu tenho uma árvore de diretórios realmente profunda na minha caixa do Linux. Gostaria de contar todos os arquivos nesse caminho, incluindo todos os subdiretórios.
Por exemplo, dada esta árvore de diretórios:
/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/
Se eu entrar /home
, gostaria que ele retornasse quatro arquivos. Ou, pontos de bônus se retornar quatro arquivos e dois diretórios. Basicamente, quero o equivalente a clicar com o botão direito do mouse em uma pasta no Windows e selecionar propriedades e ver quantos arquivos / pastas estão contidos nessa pasta.
Como posso fazer isso mais facilmente? Eu tenho uma solução envolvendo um script Python que escrevi, mas por que isso não é tão fácil quanto executar ls | wc
ou semelhante?
fonte
locate
banco de dados estiver atualizado:locate /some/path | wc -l
(ou no meu Mac:)locate -c /some/path
. Mas: isso também contará arquivos/this/other/path/with/some/path
e contará as próprias pastas.Respostas:
find . -type f | wc -l
Explicação:
find . -type f
localiza todos os arquivos ( -tipo f ) neste diretório ( . ) E em todos os subdiretórios, os nomes dos arquivos são impressos para padronizar um por linha.Isso é então canalizado | em
wc
(contagem de palavras), a-l
opção diz a wc para contar apenas as linhas de sua entrada.Juntos, eles contam todos os seus arquivos.
fonte
find
saída1
As respostas acima já respondem à pergunta, mas acrescentarei que, se você usar o find sem argumentos (exceto a pasta em que deseja que a pesquisa ocorra), como em:
a pesquisa é muito mais rápida, quase instantânea, ou pelo menos para mim. Isso ocorre porque a cláusula type precisa executar uma chamada de sistema stat () em cada nome para verificar seu tipo - omitir isso evita isso.
Isso tem a diferença de retornar a contagem de arquivos mais as pastas em vez de apenas os arquivos, mas pelo menos para mim é suficiente, já que geralmente uso isso para descobrir quais pastas têm grandes quantidades de arquivos que levam uma eternidade para copiá-las e compactá-las. Contar pastas ainda me permite encontrar as pastas com a maioria dos arquivos, preciso de mais velocidade do que precisão.
fonte
1
Para arquivos:
Para diretórios:
Ambos trabalham no diretório de trabalho atual.
fonte
1
With bash 4+
Não é necessário chamar o find duas vezes, se você deseja procurar por arquivos e diretórios
fonte
Leve atualização para a resposta aceita, se você quiser uma contagem de dirs e
fonte
find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn
(Aqui, o tipo%T
está vazio para um arquivo normal, um asterisco para um arquivo executável ou uma barra para uma pasta; portanto,%HT
é necessário ou algum texto extra para evitar que o espaço não seja contado, como> %T
. )