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:
find
tambié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 .vim
con PHP? O cómo obtener solo el total, sin la lista. Quiero decir, en este caso obtener solo52
?(ls).Count
ls -l | grep -c ^d
es 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 */ | wc
saldrás puesto como
1 309 4594
2nd digit
representa no. de directorios.o
tree -L 1 | tail -1
fuente
zsh: no matches found: */
necesita nullglobecho
. typewhich echo
echo */ | wc -w
Para buscar
-mindepth
significa el número total recusivo en directorios-maxdepth
significa número total recusivo en directorios-type d
significa directorioY para los
wc -l
medios contar las líneas de la entradafuente
find . -mindepth 1 -maxdepth 1 -type d | wc -l
le 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 2
y 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
-lR
ignoran el directorio con prefijo de punto mientras losfind -type d
cuenta, 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-lRa
porque se llega también para cada directorio.
y..
entrada. Se aplica también a la respuesta de @Pavel AnossovEjecute
stat -c %h folder
y 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ípicamentefind
máswc
).Usando sh / bash:
Usando csh / tcsh:
Explicación:
stat -c %h folder
imprime 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
images
está 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 -l
para el recuento de líneas.fuente
man ls
,-d
hace: "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-d
conmutador 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 -l
fuente
ls -l | grep ^d | wc -l
servirá, 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
x
estándar cada vez que se encuentra un directorio, y luego usarlowc
para 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
N
es un nullglob,/
hace que se acople directorios,#
los recuentos. Manejará perfectamente los espacios en los nombres de los directorios y también regresará0
si 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
sed
ybc
.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
!