No, ls -d "*d" will try to list a file by the literal name '*d'.
If you use find instead then if the filename pattern contains any wildcards, you need to put them into double quotes to prevent the shell from expanding it itself. Single quotes would cause find to search for a file with a literal name of '*d'.
shells used in GNU/Linux (or *BSD, or QNX) are expanding wildcards
And, yes, The use of: echo */ shows that the shell is expanding the wildcard and filling the filenames into the argument list. That's what my experiment points out.
You type in the command: ls -d .*/
and the command ls will run with an argument list like
./kde/ ./gnome/ ./ssh/
So it is the same as if you had typed in: ls -d ./kde ./gnome ./ssh
The ls command itself will print the same results regardless. Using 'echo .*/' you can see that the arguments will be.
About listing a file in a subdirectory tree, it is better to use the find command for that.
This might work:
$ ls */*/*/*/*/*/*/README
if you know how the depth of the search but that is useless practically.
You could do: ls * -R | grep '/README$'
To list all the files in all the subdirectories but filter out all but README files. This will be very inefficient.