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.

Respostas:


224

Pode ser algo como

find . -type f | wc -l

faria o truque. Tente o comando da pasta pai.


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.


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

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 .


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.


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

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


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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.