Trova il numero di file nella cartella e nelle sottocartelle?


143

Voglio trovare il conteggio totale del numero di file in una cartella e in tutte le sue sottocartelle.

Risposte:


224

Potrebbe essere qualcosa di simile

find . -type f | wc -l

farebbe il trucco. Prova il comando dalla cartella principale.


3
La soluzione non funzionerà sui file i cui nomi contengono una nuova riga.
utente sconosciuto

2
@utente sconosciuto:find . -type f -ls | wc -l
organizzare il

1
ancora più veloce:find . -type f -print0 | tr -d -c '\0' | wc -c
organizzare il

13
@arrange: ancora più veloce: find . -type f -printf . | wc -c- Adotto la stampa per la mia soluzione anziché la mia eco -exec.
utente sconosciuto il

1
questo comando ha funzionato come un incantesimo nel mio caso, sembra magia nera
pcko1

27

Usa il treecomando Potrebbe essere necessario installare il treepacchetto.

Elencherà tutti i file e le cartelle nella cartella data e un riepilogo alla fine.


14

Per contare i file (anche i file senza estensione) nella radice della directory corrente, utilizzare:

ls -l | grep ^- | wc -l

Per contare i file (anche i file senza estensione) in modo ricorsivo dalla radice della directory corrente, utilizzare:

ls -lR | grep ^- | wc -l

1
Quelli non conteranno i file nascosti.
utente sconosciuto

Vero. Sono più propenso ad accettare e utilizzare la tua risposta come soluzione.
user38537

13

Il modo più rapido e semplice è usare tree. La sua velocità è limitata dal tuo terminale di uscita, quindi se installi il risultato a tail -1, otterrai un risultato immediato. Puoi anche controllare a quale livello di directory ti piacciono i risultati, usando l' -Lopzione. Per output colorato, utilizzare -C. Per esempio:

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

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

Se non è già lì, puoi ottenerlo qui .


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

Non contare le righe di output di find, poiché i nomi file, contenenti 99 newline, verranno conteggiati come 100 file.


4
I nomi di file contenenti nuove righe sono un caso limite incredibilmente raro.
DisgruntledGoat

8
@DisgruntledGoat: Quindi sarà estremamente difficile trovare un errore.
utente sconosciuto il

Mi piace un buon caso, soprattutto molti anni dopo.
user38537

3

Utilizzare questo comando per ogni cartella nel percorso

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

1

find sembra essere più veloce dell'albero, quindi ho usato di seguito per contare i file in ciascuna directory della directory di lavoro corrente (ignorando i file in CWD) consentendo alle directory di avere spazi:

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


L'analisi dell'output di lsè una pessima idea.
souravc,

Ottimo codice, come posso organizzare le righe di output in un numero crescente o decrescente di file
nightcrawler

0

Puoi usare find . | wc -l

find .elencherà tutti i file e le cartelle e tutti i contenuti che iniziano nella cartella corrente.
wc -lconta i risultati di find


Questa soluzione conta anche le cartelle, ho dato il segno perché corrispondeva alla mia occasione in cui non volevo contarle :)
topless

La soluzione non funzionerà sui file i cui nomi contengono una nuova riga.
utente sconosciuto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.