web-dev-qa-db-fra.com

Comment compter le nombre de dossiers dans un lecteur sous Linux?

Je dois organiser un disque dur externe de manière à ne pas contenir plus de 500 dossiers. Le volet "Propriétés" d'Ubuntu n'indique que le nombre de fichiers, pas le nombre de dossiers.

Existe-t-il une simple ligne de commande qui indique le nombre de sous-répertoires?

J'ai besoin de compter récursivement, et le lecteur est un disque dur externe monté à /media/MUSIC/. C'est pour un système stéréo de voiture dont la documentation indique qu'il ne lit que les 500 premiers dossiers.

24
Dean Rather

Accédez à votre lecteur et exécutez simplement

ls -lR | grep ^d | wc -l
21
Aniket Thakur

Trouver tous les dossiers au total, y compris les sous-répertoires?

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

... ou trouvez tous les dossiers dans le répertoire racine (sans compter les sous-répertoires)?

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

Les nouvelles lignes sont des caractères valides dans les noms de répertoire. Je suggère de laisser find imprimer une ligne vide pour chaque répertoire trouvé, puis de laisser wc compter ces lignes.

find /mount/point -type d -printf '\n' | wc -l
4
Erik Sjölund

Essayez ce qui suit [voir ci-dessous]:

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

Cela affichera une liste du répertoire en cours sur une colonne, avec des barres obliques de fin pour les éléments qui sont des sous-répertoires, puis comptera les lignes avec les barres obliques.

EDIT: vous devriez probablement aller avec la réponse du charlatan, car elle est un peu plus explicite, mais j'ai corrigé la mienne (après avoir pris en compte les suggestions de charlatan).

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

J'ai trouvé du --inodes utile, mais je ne suis pas sûr de la version de du requise. Sur Ubuntu 17.10, les travaux suivants:

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

Combinez avec | sort -nr pour trier par ordre décroissant le nombre d'inodes contenus.

1
krlmlr

J'ai écrit ffcnt pour accélérer le comptage récursif de fichiers dans certaines circonstances: disques de rotation et systèmes de fichiers prenant en charge le mappage d'étendue.

Cela peut être un ordre de grandeur plus rapide que les approches basées sur ls ou find

1
the8472

Lorsqu'il existe un grand nombre de répertoires, des outils tels que tree peuvent prendre une éternité à finir ou même se bloquer, vous pouvez donc utiliser quelque chose de plus efficace.

Le moyen le plus efficace de compter les répertoires auxquels je peux penser serait le suivant: find n’imprimera qu’un . pour chaque dossier trouvé à la place du chemin complet et du nom du fichier et wc n’aura qu’à itérer sur le nombre de caractères:

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

Pour exclure /mount/point du calcul et ne compter que les sous-répertoires:

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

J'aime utiliser l'arbre pour tirer le nombre de répertoires avec

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

Ou, mal utiliser trouver pour montrer la majeure partie des dossiers sont situés avec

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