Cómo contar el número de carpetas en un directorio específico. Estoy usando el siguiente comando, pero siempre proporciona uno adicional.
find /directory/ -maxdepth 1 -type d -print| wc -l
Por ejemplo, si tengo 3 carpetas, este comando proporciona 4. Si contiene 5 carpetas, el comando proporciona 6. ¿Por qué?

Respuestas:
findtambién está imprimiendo el directorio en sí:En su lugar, puede probar los elementos secundarios del directorio y no descender a ellos en absoluto:
También puede utilizar
ls:fuente
$ ls -l .vimcon PHP? O cómo obtener solo el total, sin la lista. Quiero decir, en este caso obtener solo52?(ls).Countls -l | grep -c ^des completamente simple y funciona. @Pathros probablemente haya una forma mejor en PHP, pero en el peor de los casos en PHP, siempre puede usar la función shell_exec () para ejecutar la línea de comando y devolver los resultados a una cadena. ie$dirCount = shell_exec('ls -l | grep -c ^d');Obtenga un recuento de solo los directorios en el directorio actual
echo */ | wcsaldrás puesto como
1 309 45942nd digitrepresenta no. de directorios.o
tree -L 1 | tail -1fuente
zsh: no matches found: */necesita nullglobecho. typewhich echoecho */ | wc -wPara buscar
-mindepthsignifica el número total recusivo en directorios-maxdepthsignifica número total recusivo en directorios-type dsignifica directorioY para los
wc -lmedios contar las líneas de la entradafuente
find . -mindepth 1 -maxdepth 1 -type d | wc -lle dará muchos espacios entre el número, por ejemplo: `2` puede evitarlo usando esto:dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2y podría ser útil para condiciones, como:if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"Si solo tiene directorios en la carpeta y no hay archivos, esto lo hace:
fuente
La mejor manera de navegar a su unidad y simplemente ejecutar
y buscar todas las carpetas en total, incluidos los subdirectorios?
... o encontrar todas las carpetas en el directorio raíz (sin incluir los subdirectorios)?
¡Salud!
fuente
-lRignoran el directorio con prefijo de punto mientras losfind -type dcuenta, por lo que el recuento dado por el primer comando es incorrecto si tiene directorios con prefijo de punto (por ejemplo, tiene el subdirectorio .git). Simplemente no se puede utilizar-lRaporque se llega también para cada directorio.y..entrada. Se aplica también a la respuesta de @Pavel AnossovEjecute
stat -c %h foldery reste 2 del resultado. Esto emplea un solo subproceso en lugar de los 2 (o incluso 3) requeridos por la mayoría de las otras soluciones aquí (típicamentefindmáswc).Usando sh / bash:
Usando csh / tcsh:
Explicación:
stat -c %h folderimprime el número de enlaces físicos a la carpeta , y cada subcarpeta de la carpeta contiene una entrada ../ que es un enlace fijo a la carpeta . Debe restar 2 porque hay dos enlaces duros adicionales en el recuento:fuente
Creo que lo mas facil es
¿Dónde
imagesestá su directorio de destino? El indicador -d limita a los directorios, y el indicador -l realizará un listado por línea, compatible con el muy conocidowc -lpara el recuento de líneas.fuente
man ls,-dhace: "enumera los directorios en sí, no su contenido", es decir, si ejecutals /tmp, obtendrá lo que hay/tmp, y si lo ejecutals -d /tmp, simplemente obtendrá/tmp. El-dconmutador no filtra directorios, como se solicitó.Algunos ejemplos útiles:
contar archivos en el directorio actual
contar directorios en el directorio actual
contar archivos y directorios en el directorio actual
contar archivos y directorios en un subdirectorio
He notado algo extraño (al menos en mi caso):
fuente
No de directorio que podemos encontrar usando el siguiente comando
ls -l | grep "^d" | wc -lfuente
ls -l | grep ^d | wc -lservirá, no es necesario usarlo"aquíUna solución de bash pura:
Si también desea contar los directorios ocultos:
Tenga en cuenta que esto también contará los enlaces a directorios. Si no quieres eso, es un poco más difícil con este método.
Usando
find:El truco consiste en generar una salida
xestándar cada vez que se encuentra un directorio, y luego usarlowcpara contar el número de caracteres. Esto contará el número de todos los directorios (incluidos los ocultos), excluidos los enlaces.Los métodos presentados aquí son seguros para los personajes divertidos que pueden aparecer en los nombres de los archivos (espacios, nuevas líneas, caracteres globales, etc.).
fuente
Usando
zsh:El
Nes un nullglob,/hace que se acople directorios,#los recuentos. Manejará perfectamente los espacios en los nombres de los directorios y también regresará0si no hay directorios.fuente
Cuente todos los archivos y subcarpetas, estilo Windows:
fuente
Si desea utilizar expresiones regulares, intente:
fuente
La mejor respuesta a lo que quieres es
esto resta uno para eliminar el '.' no deseado directorio que encuentra listas (como patel deven mencionado anteriormente).
Si desea contar las subcarpetas de forma recursiva, deje la opción maxdepth, por lo que
PD: Si encuentra fea la sustitución de comandos, restar uno se puede hacer como un flujo puro usando
sedybc.Restando uno del recuento:
o, agregando conteo a menos uno:
fuente
La mejor manera de hacerlo:
Esto le da el recuento perfecto.
fuente
total? tu método está roto:(. ¡No analicels!