Come posso contare il numero di cartelle in un'unità usando Linux?


24

Devo organizzare un HDD esterno in modo che non ci siano più di 500 cartelle su di esso. Il riquadro "Proprietà" di Ubuntu mostra solo il conteggio dei file, non il conteggio delle cartelle.

Esiste una semplice riga di comando che mi dirà il numero di sottodirectory?

Devo contare in modo ricorsivo e l'unità è un HDD esterno montato su /media/MUSIC/. È per un sistema stereo per auto la cui documentazione dice che legge solo le prime 500 cartelle.

Risposte:


20

Passa al tuo disco ed eseguilo semplicemente

ls -lR | grep ^d | wc -l

Questo sembra fornire un numero più corretto rispetto alla risposta che ho accettato 3 anni fa. Contava la directory in cui mi trovavo, mentre ciò non avveniva.
Decano Piuttosto

Vedo anche numeri diversi, ma non troppo diversi.
SPRBRN,

Personalmente preferisco il grep -cover the wc -l. Forse sono solo io.
Maxim_united,

1
Quanto sopra supererà se una voce della directory contiene la sequenza \nd(dove si \ntrova il carattere NL).
Toby Speight,

1
Toby ha ragione, l' lsoutput non dovrebbe essere convogliato . Inoltre, questo sarà molto più lento perché deve produrre l'intero albero e quindi eseguire grep attraverso di esso
phuclv,

37

Trova tutte le cartelle in totale, comprese le sottodirectory?

find /mount/point -type d | wc -l

... o trova tutte le cartelle nella directory principale (escluse le sottodirectory)?

find /mount/point -maxdepth 1 -type d | wc -l

Quello primo è esattamente quello che sto cercando. Grazie!
Decano Piuttosto il

@Dean: sì, l'ho già usato anche per contare le directory nella mia collezione musicale. :) per i diritti in sospeso, conta i tuoi MP3: find / mount / point -type f | grep -i mp3 | wc -l
quack quixote

1
@Dean: sì, non conosco la sintassi find in modo diretto, ma di solito userei grep -v per quello: find / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc -l ... (e <i> </i> non funziona nei commenti, usa *foo*per scrivere in corsivo: pippo )
quack quixote

2
@Dean: penso che useresti semplicemente find /path -not -iname '*.mp3' | wc -lper filtrare gli MP3, o per farli usare sia per MP3 che per WAVfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
quack quixote

1
Avevo bisogno di aggiungere il tipo f per poter ignorare anche le cartelle, ma congratulazioni! Ho appena trovato un sacco di file m4a di cui non avevo idea ... Grazie!
Decano Piuttosto il

4

Le nuove righe sono caratteri validi nei nomi di directory. Suggerisco di lasciare finduna riga vuota per ogni directory trovata e quindi di wccontare quelle righe.

find /mount/point -type d -printf '\n' | wc -l

3

Prova quanto segue [vedi sotto]:

ls -1 -p | grep "/" | wc -l

Verrà stampato un elenco di una colonna della directory corrente, con barre finali per gli elementi che sono sottodirectory, quindi contano le righe con le barre.

EDIT: probabilmente dovresti andare con la risposta di Quack Quixote, in quanto è un po 'più esplicita, ma ho corretto la mia (dopo aver preso in considerazione i suggerimenti di Quack).

ls -Rp | grep "/$" | wc -l

È necessario aggiungere -R per diventare ricorsivo (scusate se non ho menzionato) e devo specificare il percorso per ls, ma sì, questo funziona: ls -1 -p -R / media / MUSIC / | grep "/" | wc -l Grazie!
Decano Piuttosto il

Dopo aver provato sia questo che il suggerimento di Quackote Quack, ho ottenuto 2 risultati diversi ... Sono propenso a credere all'altro. Grazie comunque!
Decano Piuttosto il

1
non è necessario -1poiché ls rileverà la pipe e non formatterà le colonne. inoltre puoi prendere elenchi ricorsivi con -R, ma probabilmente vorrai fare grep per "/$"abbinare solo le barre finali (o il conteggio sarà disattivato). versione finale:ls -Rp | grep "/$" | wc -l
Quack Quixote

1
la versione di ricerca che ho pubblicato conterà .(cioè /mount/point) nel suo conteggio, la versione di ls nel mio commento sopra non lo farà. questi conteggi differiscono di 1, quindi potresti usarli /mount/point/*nel comando find per correggerlo (supponendo che non ci siano dot-directory nascoste).
Quack Quixote

non sono sicuro del motivo per cui hai ottenuto i due diversi risultati, ma il metodo di @ quack includerà le directory "nascoste" (cioè quelle che iniziano con '.').
stuntmouse

1

Ho scritto ffcnt per accelerare il conteggio dei file ricorsivi in ​​circostanze specifiche: dischi rotazionali e filesystem che supportano la mappatura dell'estensione.

Può essere un ordine di grandezza più veloce di lso findbasato su approcci


1

Quando c'è un gran numero di directory, strumenti come treepotrebbero richiedere un'eternità per finire o addirittura bloccarsi, quindi potresti voler usare qualcosa di più efficiente.

Il modo più efficiente per contare le directory che mi viene in mente sarebbe il seguente, poiché ne findverrà stampato solo uno .per ogni cartella trovata anziché il percorso completo e il nome del file e wcdeve solo scorrere il numero di caratteri:

find /mount/point -type d -printf '.' |wc -c

Per escludersi /mount/pointdal calcolo e contare solo le sottodirectory:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c

1

Ho trovato du --inodesutile, ma non sono sicuro di quale versione durichieda. Su Ubuntu 17.10, funziona come segue:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Combina con | sort -nrper ordinare in ordine decrescente per numero di inode contenenti.


0

Mi piace usare l'albero per estrarre il conteggio delle directory

tree -d -R -fi --noreport | wc -l

In alternativa, trova un uso non corretto per mostrare la maggior parte delle cartelle con cui si trova

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

O qualcosa del genere: albero | grep -e '^. * directories',
mindcrime,

-2

Per trovare il numero di cartelle e directory nella directory corrente

Digita il seguente comando nel tuo terminale

echo */ | wc
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.