133 votes

comptage du nombre de répertoires dans un répertoire spécifique

Comment compter le nombre de dossiers dans un répertoire spécifique. J'utilise la commande suivante, mais elle fournit toujours un dossier supplémentaire.

find /directory/ -maxdepth 1 -type d -print| wc -l

Par exemple, si j'ai 3 dossiers, cette commande en fournit 4. Si elle contient 5 dossiers, la commande en fournit 6. Comment cela se fait-il ?

118voto

Pavel Anossov Points 23610

find imprime également le répertoire lui-même :

$ find .vim/ -maxdepth 1 -type d
.vim/
.vim/indent
.vim/colors
.vim/doc
.vim/after
.vim/autoload
.vim/compiler
.vim/plugin
.vim/syntax
.vim/ftplugin
.vim/bundle
.vim/ftdetect

Vous pouvez plutôt tester les enfants du répertoire et ne pas y descendre du tout :

$ find .vim/* -maxdepth 0 -type d
.vim/after
.vim/autoload
.vim/bundle
.vim/colors
.vim/compiler
.vim/doc
.vim/ftdetect
.vim/ftplugin
.vim/indent
.vim/plugin
.vim/syntax

$ find .vim/* -maxdepth 0 -type d | wc -l
11
$ find .vim/ -maxdepth 1 -type d | wc -l
12

Vous pouvez également utiliser ls :

$ ls -l .vim | grep -c ^d
11

$ ls -l .vim
total 52
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
-rw-rw-r--  1 anossovp anossovp   48 Aug 29  2012 filetype.vim
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
-rw-rw-r--  1 anossovp anossovp 2505 Aug 29  2012 README.rst
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax

$ ls -l .vim | grep ^d
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax

86voto

EmptyData Points 1182

Obtenir un compte de seulement les répertoires dans le répertoire courant

echo */ | wc

vous serez mis à l'écart comme 1 309 4594

2nd digit représente le nombre de répertoires.

o

tree -L 1 | tail -1

41voto

shiyani suresh Points 588
find . -mindepth 1 -maxdepth 1 -type d | wc -l

Pour trouver -mindepth signifie le nombre total de récusation dans les répertoires

-maxdepth signifie le nombre total de récusation dans les répertoires

-type d signifie répertoire

Et pour wc -l signifie compter les lignes de l'entrée

26voto

Brainmaniac Points 838

Si vous n'avez que des répertoires dans le dossier et pas de fichiers, cela fonctionne :

ls | wc -l

14voto

textral Points 935

Exécuter stat -c %h folder et soustrayez 2 du résultat. Cette méthode n'utilise qu'un seul sous-processus, contrairement aux deux (ou même trois) requis par la plupart des autres solutions proposées ici (typiquement find o ls plus wc ).

Utilisation de sh/bash :

echo $((`stat -c %h folder` - 2)) # 'echo' est une fonction de l'interpréteur de commandes.

Utilisation de csh/tcsh :

@ cnt = `stat -c %h folder` - 2 ; echo $cnt # 'echo' est un shell builtin

Explication : `stat -c %h folder` affiche le nombre de hardlinks vers *folder*, et chaque sous-dossier sous *folder* contient une entrée ../ qui est un hardlink vers *folder*. Vous devez soustraire 2 car il y a deux hardlinks supplémentaires dans le compte :

  1. dossier l'entrée ./ autoréférentielle de l'utilisateur, et
  2. dossier Le lien du parent de l'enfant avec dossier

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X