Enquanto o sinalizador -d impede que ls desça para diretórios, isso é exatamente o que ele faz. Isso não significa listar apenas diretórios. Há uma diferença sutil entre essas duas instruções, se você executar ls -d some_file , então ls mostrará some_file . Como você está usando o shell globbing ( ./* ), esse glob está se expandindo para incluir os arquivos no diretório atual, bem como os diretórios no diretório atual. Como o shell é o que executa globbing e expansão, e não ls , o ls está recebendo uma lista de arquivos.
Para contornar isso, você precisa garantir que o shell glob não inclua arquivos regulares. Você pode fazer isso usando um / à direita no glob. Como / é um caractere especial proibido em nomes de arquivo, mas que denota a separação entre diretórios, você pode usá-lo para corresponder apenas aos diretórios.
Então, por exemplo:
ls -d */