Encontre o número de arquivos nas pastas e subpastas?

143

Quero encontrar a contagem total do número de arquivos em uma pasta e todas as suas subpastas.

topless
fonte

Respostas:

224

Pode ser algo como

find . -type f | wc -l

faria o truque. Tente o comando da pasta pai.

sagarchalise
fonte
3
A solução falhará nos arquivos cujos nomes contenham uma nova linha.
usuário desconhecido
2
@user unknown:find . -type f -ls | wc -l
organize
1
ainda mais rápido:find . -type f -print0 | tr -d -c '\0' | wc -c
organize
13
@arrange: ainda mais rápido: find . -type f -printf . | wc -c- Adotei a impressão para a minha solução em vez do meu eco -exec.
usuário desconhecido
1
este comando funcionou como um encanto no meu caso, parece magia negra
pcko1
27

Use o treecomando Pode ser necessário instalar o treepacote.

Ele listará todos os arquivos e pastas na pasta especificada e um resumo no final.

Egil
fonte
14

Para contar arquivos (mesmo arquivos sem extensão) na raiz do diretório atual, use:

ls -l | grep ^- | wc -l

Para contar arquivos (mesmo arquivos sem extensão) recursivamente a partir da raiz do diretório atual, use:

ls -lR | grep ^- | wc -l
user38537
fonte
1
Esses não contam arquivos ocultos.
usuário desconhecido
Verdadeiro. Estou mais inclinado a aceitar e usar sua resposta como solução.
user38537 23/04
13

A maneira mais rápida e fácil, é usar tree. Sua velocidade é limitada pelo seu terminal de saída; portanto, se você canalizar o resultado tail -1, obterá um resultado imediato. Você também pode controlar para qual nível de diretório você gosta dos resultados, usando a -Lopção Para saída colorida, use -C. Por exemplo:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

Se ainda não estiver lá, você pode obtê-lo aqui .

not2qubit
fonte
9
find -type f -printf . | wc -c

Não conte as linhas de saída de localização, porque os nomes de arquivos, contendo 99 novas linhas, contarão como 100 arquivos.

Usuário desconhecido
fonte
4
Os nomes de arquivos que contêm novas linhas são um caso extremamente raro.
usar o seguinte
8
@DisgruntledGoat: Portanto, um erro será extremamente difícil de encontrar.
usuário desconhecido
Gosto de um bom exemplo, especialmente muitos anos depois.
user38537 20/04
3

Use este comando para cada pasta no caminho

for D in *; do echo $D; find $D -type f| wc -l; done
Sriram Murali
fonte
1

find parece ser mais rápido que a árvore, então usei abaixo para contar arquivos em cada diretório do diretório de trabalho atual (ignorando arquivos no CWD), permitindo que os diretórios tenham espaços:

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done

Mike Bounds
fonte
Analisar saída de lsé uma péssima idéia.
souravc 21/07
Grande código, como posso organizar a saída linhas dizer em um aumento ou diminuição de contagem de arquivos
nightcrawler
0

Você pode usar find . | wc -l

find .listará todos os arquivos e pastas e seus conteúdos, começando na sua pasta atual.
wc -lconta os resultados de encontrar

david
fonte
Esta solução conta também as pastas, eu dei a marca causa que combinava minha ocasião que eu não queria contá-los em :)
em topless
A solução falhará nos arquivos cujos nomes contenham uma nova linha.
usuário desconhecido
0

Eu mesmo usaria esta opção:

ls -alR | grep -c ^ -

Charles
fonte
3
Por favor, adicione alguns detalhes ...
Pierre.Vriens