Sua expressão regular não funciona porque .
não é um caractere de palavra. O grep considera apenas a-z
, A-Z
, 0-9
e _
como caracteres de palavras.
De qualquer forma, essa não é a maneira correta de fazer isso. Primeiro de tudo, analisar ls
é muito frágil e quase nunca é uma boa ideia. Aqui estão algumas outras maneiras de listar diretórios cujo nome começa com .
:
find . -type d -name '.*'
Ou, se você não quiser que ele desça em subdiretórios (e se você tiver o GNU find
, o padrão no Linux):
find . -maxdepth 1 -type d -name '.*'
Como alternativa, você pode usar apenas echo
e um shell glob:
echo .*
Isso também mostrará arquivos. Para evitar isso, use um loop como:
for i in .*; do [ -d "$i" ] && printf '%s\n' "$i"; done