É 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, há casos em que isso não é verdade:
-
Alguns unices permitem links rígidos para diretórios. Em seguida, haverá mais de dois links que não correspondem a subdiretórios.
-
Existem sistemas de arquivos nos quais os diretórios não possuem entradas para
.
e..
. O Manual de localização da GNU menciona alguns exemplos na discussão de sua opção-noleaf
(que desativa uma otimização que assume que.
e..
existem 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 (pode ainda 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 em bash e zsh onde você pode ativar a opção nullglob
).