*
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 ‘..’