É 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 ).