rm -rf não funciona para um diretório vazio [fechado]

3

No terminal, tento excluir um diretório, mas isso não funciona:

myuser$ rm -rf foo/
rm: foo/: Directory not empty

No meu diretório principal eu tenho apenas foo:

myuser$ ls
foo

Eu não tenho nenhum problema com o comando 'ls -la':

myuser$ ls -la
drwxrwxrwx@ 1 myuser  staff  65536  1 mai 10:53 .
drwxrwxrwx@ 1 myuser  staff  32768 28 aoû  2013 ..
drwxrwxrwx  1 myuser  staff  32768  1 mai 10:36 foo

O diretório foo parece estar vazio:

myuser$ ls foo/

myuser$ ls -la foo/
ls:  : No such file or directory
total 192
drwxrwxrwx  1 myuser  staff  32768  1 mai 10:36 .
drwxrwxrwx@ 1 myuser  staff  65536  1 mai 10:53 ..

Mas a linha "ls:: não existe tal arquivo ou diretório" é estranha. E eu acho que é a razão pela qual não consigo excluir este diretório. Poderíamos ver também que "ls foo" retorna uma linha vazia, como se houvesse alguma coisa, mas o que? E como deletar isso?

Obrigado

    
por guest0105 01.05.2014 / 11:24

3 respostas

2

Eu acho que você pode ter um arquivo no diretório foo com caracteres não imprimíveis em seu nome. Compare os caracteres que você na saída ls com os caracteres reais ls saídas .

cd foo
ls             # you see what your terminal lets you see
ls | od -a     # you see the character codes *really* coming from ls

Existem vários métodos para ajudar a excluir um arquivo cujo nome você não pode ver ou digitar facilmente. Aqui você pode usar a opção -i interativa de rm.

cd foo
rm -i *

Obviamente, tenha cuidado com isso. E diga apenas y ao que você deseja excluir.

Por que o seu primeiro rm -rf não o excluiu ... Gostaria de saber se você tem um apelido rm? Use alias rm para ver. Você pode executar temporariamente a versão real de rm (ignorando o alias) usando \rm -rf foo .

    
por 01.05.2014 / 13:11
1

A mensagem "Diretório não vazio" é bastante enganosa. Normalmente, um rm -rf removerá tudo em um diretório, de forma recursiva, para que não importe se estiver vazio ou não.

Nesse caso, há algumas coisas que você pode querer verificar:

  • Tente ver se há algo montado nesse diretório com df -h e desmonte se necessário
  • Tente verificar se há um arquivo aberto por um aplicativo, executando sudo lsof foo e saia do (s) aplicativo (s), se necessário
  • Experimente sudo rm -rf foo - talvez você não tenha permissões (embora não ache que seja o caso aqui)
  • Tente sair e voltar para
  • Tente reiniciar a máquina
por 01.05.2014 / 12:24
0

O comando

 rm -rf dir

não remove arquivos ocultos, isto é, aqueles que começam com um ponto, como por exemplo .bashrc . O diagnóstico diretório não vazio significa que você tem alguns arquivos ocultos, você pode listá-los com

 ls -a

ou ith

 ls .*

Você pode apagá-los recursivamente com

 rm -rf .[a-Z]*

então você poderá rmdir o diretório ofensivo.

EDITAR:

A seguinte edição prova o meu ponto:

  root@rasal:/tmp# mkdir ttp
  root@rasal:/tmp# cd ttp
  root@rasal:/tmp/ttp# touch .test
  root@rasal:/tmp/ttp# ls -a
  .  ..  .test
  root@rasal:/tmp/ttp# rm -rf *
  root@rasal:/tmp/ttp# ls -a
  .  ..  .test
  root@rasal:/tmp/ttp# 
    
por 01.05.2014 / 11:52