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 */