Comment puis-je compter le nombre de dossiers dans un lecteur utilisant Linux?

24

J'ai besoin d'organiser un disque dur externe de sorte qu'il n'y ait pas plus de 500 dossiers dessus. Le volet "Propriétés" d'Ubuntu affiche uniquement le nombre de fichiers, pas le nombre de dossiers.

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

Je dois compter récursivement, et le lecteur est un disque dur externe monté sur /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.

Dean plutôt
la source

Réponses:

20

Accédez à votre lecteur et exécutez simplement

ls -lR | grep ^d | wc -l
Aniket Thakur
la source
Cela semble fournir un nombre plus correct que la réponse que j'ai acceptée il y a 3 ans. Il comptait le répertoire dans lequel je me trouvais alors que cela ne fonctionnait pas.
Dean Rather
Je vois aussi des chiffres différents, mais pas trop différents.
SPRBRN
Personnellement, je préfère grep -cle wc -l. C'est peut-être juste moi.
Maxim_united
1
Ce qui précède sera surévalué si une entrée de répertoire contient la séquence \nd(où \nest le caractère NL).
Toby Speight
1
Toby a raison, la lssortie n'est pas censée être canalisée . De plus, cela sera beaucoup plus lent car il doit sortir tout l'arbre et ensuite exécuter grep à travers
phuclv
37

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

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

... ou trouver tous les dossiers dans le répertoire racine (hors sous-répertoires)?

find /mount/point -maxdepth 1 -type d | wc -l
Quack Quichotte
la source
Ce premier est exactement ce que je recherche. Merci!
Dean Rather
@Dean: oui, je l'ai déjà utilisé pour compter les répertoires de ma collection de musique. :) pour les droits de vantardise, comptez vos MP3: trouvez / mount / point -type f | mp3 de grep -i | wc -l
quack quixote
1
@Dean: ouais, je ne connais pas la syntaxe de recherche , mais j'utilise généralement grep -v pour cela: find / mount / pt -type f | mp3 de grep -vi | grep -vi wav | wc -l ... (et <i> </i> ne fonctionne pas dans les commentaires, utilisez *foo*pour mettre en italique: foo )
quack quixote
2
@Dean: Je pense que vous utiliseriez simplement find /path -not -iname '*.mp3' | wc -lpour filtrer les MP3, ou pour utiliser à la fois les MP3 et les WAVfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
quack quixote
1
J'avais besoin d'ajouter le -type f pour qu'il ignore également les dossiers, mais bravo! Je viens de trouver tout un tas de fichiers m4a dont je n'avais aucune idée ... Merci!
Dean Rather
4

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

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

Essayez ce qui suit [voir ci-dessous]:

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

Cela affichera une liste à une colonne du répertoire actuel, 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 de Quack Quichotte, car elle est un peu plus explicite, mais j'ai corrigé la mienne (après avoir pris en compte les suggestions de Quack).

ls -Rp | grep "/$" | wc -l
stuntmouse
la source
Besoin d'ajouter -R pour devenir récursif (désolé de ne pas avoir mentionné), et besoin de spécifier le chemin vers ls, mais oui, cela fonctionne: ls -1 -p -R / media / MUSIC / | grep "/" | wc -l Merci!
Dean Rather
Après avoir essayé à la fois cela et la suggestion de Quack Quack, j'ai obtenu 2 résultats différents ... J'ai tendance à croire l'autre. Merci quand même!
Dean Rather
1
vous n'avez pas besoin de -1puisque ls détectera le canal et ne formatera pas les colonnes. vous pouvez également saisir des listes récursives avec -R, mais alors vous voudrez probablement chercher "/$"pour ne faire correspondre que les barres obliques de fin (ou le nombre sera désactivé). version finale:ls -Rp | grep "/$" | wc -l
quack quixote
1
la version trouvée que j'ai publiée comptera .(c'est-à-dire /mount/point) dans son nombre, la version ls dans mon commentaire ci-dessus ne le sera pas. ces nombres diffèrent de 1, que vous pourriez utiliser /mount/point/*dans la commande find pour corriger cela (en supposant qu'aucun répertoire de points caché).
Quack Quichote
Je ne sais pas pourquoi vous avez obtenu les deux résultats différents, mais la méthode de @ quack inclura les répertoires "cachés" (c'est-à-dire ceux qui commencent par ".").
stuntmouse
1

J'ai écrit ffcnt pour accélérer le comptage récursif des fichiers dans des circonstances spécifiques: disques rotatifs et systèmes de fichiers qui prennent en charge le mappage d'étendue.

Il peut être un ordre de grandeur plus rapide que que lsou findapproches fondées

the8472
la source
1

Lorsqu'il existe un grand nombre de répertoires, des outils tels treeque la mise en place ou la suspension peuvent prendre une éternité, vous pouvez donc utiliser quelque chose de plus efficace.

Le moyen le plus efficace de compter les répertoires auxquels je pense est le suivant, car findil n'en imprimera qu'un .pour chaque dossier trouvé au lieu du chemin d'accès complet et du nom de fichier et wcn'a besoin que d'itérer sur le nombre de caractères:

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

Pour s'exclure /mount/pointdu calcul et ne compter que les sous-répertoires:

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

J'ai trouvé du --inodesutile, mais je ne suis pas sûr de la version durequise. 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 -nrpour trier par ordre décroissant du nombre d'inodes contenus.

krlmlr
la source
0

J'aime utiliser l'arborescence pour extraire le nombre de répertoires avec

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

Ou, mal utiliser find pour montrer que la plupart des dossiers se trouvent avec

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn
Cameron L.
la source
Ou quelque chose comme: arbre | grep -e '^. * répertoires,'
mindcrime
-2

Pour trouver le nombre de dossiers et de répertoire dans le répertoire actuel

Tapez la commande suivante dans votre terminal

echo */ | wc
ASHISH RANJAN
la source