Puede recorrer todos los directorios, incluidos los directorios ocultos (comenzando con un punto) con:
for file in */ .*/ ; do echo "$file is a directory"; done
nota: el uso de la lista */ .*/
funciona en zsh solo si existe al menos un directorio oculto en la carpeta. En bash se mostrará también .
y..
Otra posibilidad para que bash incluya directorios ocultos sería usar:
shopt -s dotglob;
for file in */ ; do echo "$file is a directory"; done
Si desea excluir enlaces simbólicos:
for file in */ ; do
if [[ -d "$file" && ! -L "$file" ]]; then
echo "$file is a directory";
fi;
done
Para generar solo el nombre del directorio final (A, B, C como se cuestionó) en cada solución, use esto dentro de los bucles:
file="${file%/}" # strip trailing slash
file="${file##*/}" # strip path and leading slash
echo "$file is the directoryname without slashes"
Ejemplo (esto también funciona con directorios que contienen espacios):
mkdir /tmp/A /tmp/B /tmp/C "/tmp/ dir with spaces"
for file in /tmp/*/ ; do file="${file%/}"; echo "${file##*/}"; done