Se você precisar selecionar arquivos mais específicos do que apenas diretórios, use find
e passe para while read
:
shopt -s dotglob
find * -prune -type d | while IFS= read -r d; do
echo "$d"
done
Use shopt -u dotglob
para excluir diretórios ocultos (ou setopt dotglob
/ unsetopt dotglob
em zsh).
IFS=
para evitar a divisão de nomes de arquivos contendo um dos $IFS
, por exemplo: 'a b'
veja Resposta do AsymLabs abaixo para mais opções find
editar:
Caso você precise criar um valor de saída dentro do loop while, você pode contornar o subshell extra por este truque:
while IFS= read -r d; do
if [ "$d" == "something" ]; then exit 1; fi
done < <(find * -prune -type d)