* inclui apenas arquivos visíveis. Se você quiser excluir esses e os ocultos, use:
rm -rf * .*
A opção dotglob
Com o bash, podemos alterar esse comportamento e exibir arquivos. Para ilustrar, vamos criar dois arquivos, um oculto e outro não:
$ touch unhidden .hide1
$ ls *
unhidden
Como você pode ver, somente a unshidden é mostrada por ls * . Agora vamos definir a opção dotglob :
$ shopt -s dotglob
$ ls *
.hide1 unhidden
Ambos os arquivos aparecem agora. Podemos, é claro, desativar o Dotglob se quisermos:
$ shopt -u dotglob
$ ls *
unhidden
Documentação
De man bash :
When a pattern is used for pathname expansion, the character "." at the start of a name or immediately following a slash must be matched explicitly, unless the shell option dotglob is set. When matching a pathname, the slash character must always be matched explicitly. In other cases, the ''.'' character is not treated specially. See the description of shopt below under SHELL BUILTIN COMMANDS for a description of the nocaseglob, nullglob, failglob, and dotglob shell options.
Em outras palavras, a expansão do nome do caminho ignora os arquivos cujos nomes começam com . , a menos que . seja explicitamente especificado.
Problemas de segurança
Para evitar surpresas desagradáveis, rm se recusará a remover o diretório atual . e o diretório pai .. , mesmo se você especificá-los na linha de comando:
$ rm -rf .*
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘..’