Por que meu comando: “rm -rf *” não exclui todos os arquivos em um diretório? [duplicado]

1

A maioria dos arquivos sumiram, mas ainda tenho esses dois arquivos:

".RData" e ".Rhistory"

Por que isso acontece? Estou trabalhando com o R, mas não sei o que são esses arquivos.

Depois, posso removê-los individualmente sem precisar usar o sudo.

    
por Goldname 13.06.2016 / 08:46

2 respostas

13

* 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 ‘..’
    
por 13.06.2016 / 08:51
-1

Verifique se o diretório está correto, então

sudo rm -rf * .*

    
por 13.06.2016 / 08:53

Tags