Comment compter le nombre de dossiers dans un répertoire spécifique. J'utilise la commande suivante, mais elle en fournit toujours une 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. Pourquoi?
Réponses:
find
imprime également le répertoire lui-même:Vous pouvez à la place tester les enfants du répertoire et ne pas y descendre du tout:
Vous pouvez également utiliser
ls
:la source
$ ls -l .vim
avec PHP? Ou comment obtenir uniquement le total, sans la liste. Je veux dire, dans ce cas, obtenez seulement52
?(ls).Count
ls -l | grep -c ^d
est très simple et fonctionne. @Pathros il existe probablement un meilleur moyen en PHP, mais dans le pire des cas en PHP, vous pouvez toujours utiliser la fonction shell_exec () pour exécuter la ligne de commande et renvoyer les résultats dans une chaîne. ie$dirCount = shell_exec('ls -l | grep -c ^d');
Obtenez un décompte uniquement des répertoires du répertoire actuel
echo */ | wc
vous sortirez comme
1 309 4594
2nd digit
représente non. d'annuaires.ou
tree -L 1 | tail -1
la source
zsh: no matches found: */
besoins nullglobecho
. typewhich echo
echo */ | wc -w
Car trouver
-mindepth
signifie le nombre total de récusations dans les répertoires-maxdepth
signifie nombre total de récusations dans les répertoires-type d
signifie répertoireEt pour des
wc -l
moyens compter les lignes de l'entréela source
find . -mindepth 1 -maxdepth 1 -type d | wc -l
vous donnera beaucoup d'espaces entre le nombre, par exemple: `2` vous pouvez l'empêcher en utilisant ceci:dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2
et pourrait être utile pour des conditions, comme:if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
Si vous n'avez que des répertoires dans le dossier et aucun fichier, procédez comme suit:
la source
Meilleur moyen de naviguer vers votre lecteur et d'exécuter simplement
et pour trouver tous les dossiers au total, y compris les sous-répertoires?
... ou trouver tous les dossiers dans le répertoire racine (sans compter les sous-répertoires)?
À votre santé!
la source
-lR
ignorent le répertoire avec le préfixe de points tout en lesfind -type d
comptant. Ainsi, le décompte donné par la première commande est faux si vous avez des répertoires avec le préfixe de points (par exemple, vous avez un sous-répertoire .git!). Vous ne pouvez pas simplement utiliser-lRa
car vous obtenez également pour chaque répertoire un.
et une..
entrée. Cela s'applique également à la réponse de @Pavel AnossovExécutez
stat -c %h folder
et soustrayez 2 du résultat. Cela n'emploie qu'un seul sous-processus par opposition aux 2 (ou même 3) requis par la plupart des autres solutions ici (généralementfind
pluswc
).Utilisation de sh / bash:
En utilisant csh / tcsh:
Explication:
stat -c %h folder
imprime le nombre de liens physiques vers le dossier , et chaque sous- dossier sous dossier contient une entrée ../ qui est un lien direct vers le dossier . Vous devez soustraire 2 car il y a deux liens physiques supplémentaires dans le décompte:la source
Je pense que le plus simple est
où
images
est votre répertoire cible. L'indicateur -d limite les répertoires, et l'indicateur -l effectuera une liste par ligne, compatible avec le très familierwc -l
pour le nombre de lignes.la source
man ls
,-d
does: "lister les répertoires eux-mêmes, pas leur contenu", c'est-à-dire que si vous exécutezls /tmp
, vous obtiendrez ce qu'il y a/tmp
, et si vous exécutez,ls -d /tmp
vous obtenez simplement/tmp
. Le-d
commutateur ne filtre pas les répertoires, comme cela a été demandé.Quelques exemples utiles:
compter les fichiers dans le répertoire actuel
compter les répertoires dans le répertoire courant
compter les fichiers et les répertoires dans le répertoire actuel
compter les fichiers et les répertoires dans un sous-répertoire
J'ai remarqué une chose étrange (du moins dans mon cas):
la source
Aucun répertoire que nous pouvons trouver en utilisant la commande ci-dessous
ls -l | grep "^d" | wc -l
la source
ls -l | grep ^d | wc -l
vais le faire, il n'est pas nécessaire d'utiliser"
iciUne solution pure bash:
Si vous souhaitez également compter les répertoires cachés:
Notez que cela comptera également les liens vers les répertoires. Si vous ne le souhaitez pas, c'est un peu plus difficile avec cette méthode.
Utilisation
find
:L'astuce consiste à afficher un
x
vers stdout chaque fois qu'un répertoire est trouvé, puis à l'utiliserwc
pour compter le nombre de caractères. Cela comptera le nombre de tous les répertoires (y compris ceux cachés), à l'exclusion des liens.Les méthodes présentées ici sont toutes sans danger pour les caractères amusants qui peuvent apparaître dans les noms de fichiers (espaces, retours à la ligne, caractères globaux, etc.).
la source
Utilisation
zsh
:Le
N
est un nullglob, le/
fait correspondre aux répertoires,#
compte. Il gérera parfaitement les espaces dans les noms de répertoire ainsi que les retours0
s'il n'y a pas de répertoires.la source
Comptez tous les fichiers et sous-dossiers, style Windows:
la source
Si vous souhaitez utiliser des expressions régulières, essayez:
la source
La meilleure réponse à ce que vous voulez est
cela en soustrait un pour supprimer le «.» indésirable. répertoire qui trouve des listes (comme patel deven mentionné ci-dessus).
Si vous voulez compter les sous-dossiers de manière récursive, laissez simplement l'option maxdepth, donc
PS Si vous trouvez la substitution de commande moche, en soustraire une peut être faite comme un flux pur en utilisant
sed
etbc
.Soustraire un du nombre:
ou, en ajoutant le nombre à moins un:
la source
Meilleure façon de le faire:
Cela vous donne le décompte parfait.
la source
total
? votre méthode est cassée:(
. N'analyse pasls
!