Você pode percorrer todos os diretórios, incluindo diretórios ocultos (começando com um ponto) com:
for file in */ .*/ ; do echo "$file is a directory"; done
nota: o uso da lista */ .*/
funciona no zsh apenas se existir pelo menos um diretório oculto na pasta. No bash, mostrará também .
e..
Outra possibilidade do bash incluir diretórios ocultos seria usar:
shopt -s dotglob;
for file in */ ; do echo "$file is a directory"; done
Se você deseja excluir links simbólicos:
for file in */ ; do
if [[ -d "$file" && ! -L "$file" ]]; then
echo "$file is a directory";
fi;
done
Para gerar apenas o nome do diretório à direita (A, B, C, conforme questionado) em cada solução, use-o nos loops:
file="${file%/}" # strip trailing slash
file="${file##*/}" # strip path and leading slash
echo "$file is the directoryname without slashes"
Exemplo (isso também funciona com diretórios que contêm espaços):
mkdir /tmp/A /tmp/B /tmp/C "/tmp/ dir with spaces"
for file in /tmp/*/ ; do file="${file%/}"; echo "${file##*/}"; done