Se eu executar rm *
dentro de um diretório contendo arquivos, somente os arquivos neste diretório serão excluídos? Ou o asterisco também inclui a raiz do sistema de arquivos /
?
Se eu executar rm *
dentro de um diretório contendo arquivos, somente os arquivos neste diretório serão excluídos? Ou o asterisco também inclui a raiz do sistema de arquivos /
?
Assim como nomes de arquivos simples referem-se a itens no diretório atual,
*
também se expandem para itens no diretório atual. Não há nenhum mecanismo que o faça incluir/
entre os resultados. (Você sempre pode testar usandoecho *
.)Portanto, todos os arquivos no diretório atual serão removidos, mas os diretórios permanecerão porque você não especificou a opção de remover diretórios recursivamente (-r).
Se você habilitar o modo recursivo usando
rm -r
, os arquivos e subdiretórios serão removidos - mas o programa só irá para baixo, nunca para cima. (rm sempre pula o..
item que se refere a "diretórios pais". Na verdade, no Linux, mesmo que você tente deliberadamenterm -r ..
, ele mostrará um aviso e se recusará a fazer isso.)Para confirmar o que
*
é expandido pelo shell atual, execute:Por padrão, inclui apenas arquivos/diretórios não ocultos nas pastas atuais. Para arquivos ocultos, defina
dotglob
.No entanto, se você executar:
Por padrão, ele incluirá todos os arquivos ocultos, juntamente com a pasta atual (
.
) e a principal (..
).Para obter uma solução alternativa, consulte: Como usar o curinga .* no bash, mas excluir o diretório pai (..)?