É geralmente verdadeiro em sistemas UNIX que o número de links para um diretório é o número de subdiretórios mais 2. No entanto, existem casos em que isso não é verdade:
Alguns departamentos permitem links físicos para diretórios. Depois, haverá mais de 2 links que não correspondem aos subdiretórios.
Existem sistemas de arquivos nos quais os diretórios não possuem entradas para .
e ..
. O manual de localização do GNU menciona alguns exemplos na discussão de sua -noleaf
opção (que desativa uma otimização que supõe isso .
e ..
existe em todos os diretórios): “sistemas de arquivos em CD-ROM ou MS-DOS ou pontos de montagem de volume do AFS”
Uma maneira quase confiável de contar o número de subdiretórios (ainda pode falhar se um nome de arquivo contiver um caractere de nova linha) é
$(($(LC_ALL=C ls -la /path/to/directory | grep '^d' | wc -l) - 2)
Uma maneira mais confiável usa globs de shell */
e .*/
; como de costume, lidar com o caso em que o padrão não corresponde é um pouco trabalhoso (exceto no bash e no zsh, onde você pode ativar a nullglob
opção).
-type d
, mas: 1. isso requer o GNU find; 2. Você precisa subtrair 1 para o diretório inicial (ou passar-mindepth 1
).