Por lo general, es cierto en sistemas Unix que el número de enlaces a un directorio es el número de subdirectorios más 2. Sin embargo, hay casos en los que esto no es cierto:
Algunas unidades permiten enlaces duros a directorios. Luego habrá más de 2 enlaces que no corresponden a subdirectorios.
Hay sistemas de archivos donde los directorios no tienen entradas para .
y ..
. El manual de búsqueda de GNU menciona algunos ejemplos en la discusión de su -noleaf
opción (que deshabilita una optimización que asume eso .
y ..
existe en todos los directorios): "CD-ROM o sistemas de archivos MS-DOS o puntos de montaje de volumen AFS"
Una forma casi confiable de contar el número de subdirectorios (aún puede fallar si un nombre de archivo contiene un carácter de nueva línea) es
$(($(LC_ALL=C ls -la /path/to/directory | grep '^d' | wc -l) - 2)
Una forma más confiable utiliza globos de concha */
y .*/
; como de costumbre, manejar el caso donde el patrón no coincide es un poco molesto (excepto en bash y zsh donde puede activar la nullglob
opción).
-type d
, pero: 1. esto requiere GNU find; 2. necesita restar 1 para el directorio de inicio (o pasar-mindepth 1
).