Por que obtenho "Diretório não vazio" quando tento remover um diretório vazio?

37

Eu tenho esse diretório vazio, mas continuo recebendo a seguinte mensagem de erro:

Cannot remove test: Directory not empty

Eu sei que essa pergunta já foi feita várias vezes, mas nenhuma delas ajudou.

Tentei ls -lame certificar de que não havia arquivos ocultos e não parece haver: insira a descrição da imagem aqui

Eu tentei sudo rmdir testtanto quanto sudo rm -rf teste simplesmente não sei o que está errado.

Eu li que pode ser um problema com o sistema de arquivos, mas não tenho idéia de como resolver isso.

rbrick
fonte
Tentesudo fsck /
ike
2
É um diretório normal ou um ponto de montagem. Se este é um ponto de montagem, ele deve ser desmontado antes de excluir. Se for um diretório normal, em algum momento pode haver alguns identificadores abertos que causam esse problema. Reinicie sua máquina uma vez e tente excluí-la.
vembutech
@rbrick O testnome de usuário do seu login é? qual é a saída echo $USER? eo que echo $HOME?
αғsнιη
11
Estou confuso, por que o usuário não tem permissões de execução no diretório, mas o grupo possui?
Julian Stirling
2
possível duplicata de Como excluir um diretório não vazio no Terminal?
Radu Rădeanu 27/08/2015

Respostas:

36

Eu tive o mesmo problema em um disco rígido externo, tentei de várias maneiras usando a linha de comando, mas sempre falhava. Foi o que funcionou para mim:

  1. Clique com o botão direito na pasta
  2. Mover para lixeira
  3. Lixo vazio

Sim, é bobagem, mas funcionou para mim (eu realmente não sei como e por que, mas a pasta maldita não existe mais)

Marco Ottina
fonte
Eu tenho o mesmo problema e sua resposta funciona. Não tenho certeza do que aconteceu a coisa boba e por que "-rf" falhou ao remover uma pasta não vazia.
Art
3
O que aconteceu aqui? Por que funcionou?
Sahil Arora
O que aconteceu? Honestamente, eu não sei. Talvez o arquivo da pasta tenha sido corrompido por algum motivo: um sinalizador como "está vazio" ou o contador de arquivos como "quantos arquivos há dentro" foi definido com um valor incorreto. Às vezes, erros como esse podem ser causados ​​por danos no disco rígido. Por que funcionou? Eu não sei como os comandos são implementados (pense em C), mas acho que eles verificam esses sinalizadores e contadores antes de agir (quero dizer, se o contador de arquivos> 0 então "error: directory not empty" e abort), enquanto esvazia o O lixo remove diretamente a pasta e todos os seus arquivos e subpastas sem nenhum tipo de verificação.
Marco Ottina 28/05
Talvez a exclusão de uma pasta pela linha de comando exija algumas condições, como o vazio da pasta, (porque a remoção do nó da pasta do sistema de arquivos remove apenas esse nó de link único e exige que a pasta esteja vazia, para que nenhum outro nó do arquivo seja "esquecido". "através do sistema de arquivos devido à perda do link intermediário para eles, representado pela pasta). e a exclusão de uma pasta com o botão direito do mouse -> excluir ou esvaziar a lixeira remove a pasta E todos os arquivos e subpastas recursivamente, sem se importar com sinalizadores, contadores e animais como que (assim, sem verificações são realizadas)
Marco Ottina
11
No meu caso, o subdiretório em questão estava em uma pasta compartilhada do meu Mac para uma VM linux, e eu estava tentando excluir a pasta do lado da VM linux. Parece que o lado do Mac estava segurando algumas pastas. Fazendo o rm -rflado do Mac funcionou.
precisa saber é o seguinte
5

Eu tenho o sistema dual win 10 + ubuntu instalado. E ambos os sistemas compartilham as parições do Windows.

Recentemente, também encontrei incapazes de excluir pastas vazias nessas partições no ubuntu. Não consigo encontrar uma solução para resolvê-lo no Linux.

No entanto, depois de mudar para o Windows e executar

chkdsk

via cmdpara o disco de destino. Alguns erros foram verificados. e então eu corro

chkdsk /F

corrigir erro de disco.

Depois que terminar, eu posso excluir essas pastas agora.

e-cloud
fonte
2
Este método funciona para mim. Eu também acho importante notar que as partições compartilhadas são formatadas em NTFS e que provavelmente estão corrompidas.
krismath
4

Você pode excluí-lo digitando sudo rm -rf {dir_name}. O diretório pode ter sido definido com permissão somente leitura. Espero que o comando fornecido possa excluir a pasta.

Wolverine
fonte
Eu recebo Directory not emptyassim mesmo. Parece estranho, então gravei minha tela para provar.
naXa 14/03
Esse comando na resposta funciona mesmo que o diretório tenha conteúdo e também com subdiretórios.
Wolverine
não acredite em mim, apenas assista: D drive.google.com/open?id=1UEYVa4UT6df7xucrq-lO82xjk3afHHzA
naXa
esse comportamento estranho foi causado por erros na partição NTFS. resolvido com chkdsk /F.
naXa 15/03
4

Eu tive o mesmo problema que não foi possível remover o diretório, pois não está vazio.

Essa sequência de operações funcionou para mim.

  1. Da linha de comando primeiro

    sudo rmdir  --ignore-fail-on-non-empty folder-name-to-be-deleted
    

O comando acima ajuda o ubuntu a ignorar o diretório não está vazio.

  1. Então basta ir para a pasta e Shift + Del. Isso é tudo.
Amit
fonte
3

Solução GUI

  1. Mova ou recorte e cole a pasta na pasta da lixeira
  2. esvazie a lixeira

está feito.

Solução de linha de comando

sudo mv folder_error/ .local/share/Trash

você pode limpar com o lixo-cli: lixo-vazio ou

sudo rm -fr ~/.local/share/Trash/*
Kadir Y.
fonte
11
Eu acho que a solução da linha de comando aqui é na verdade uma solução geral. Mova a pasta vazia para outro local e remova-a quando for movida. Por exemplo, algo assim mkdir a ; mv test a/ ; rm -rf a/test ; rm -rf a. Uma abordagem como essa funcionou para mim (embora eu não tenha idéia do porquê) e não precisava de acesso root.
Jake Fisher
2

Se o diretório fizer parte de um sistema de arquivos montado com CIFS (também conhecido como samba) e contiver um arquivo que seja um link simbólico quebrado, lsnão será mencionado o arquivo. (Observo esse bug em um cliente CIFS executando 14.04.2 LTS e um servidor executando 12.04.5 LTS.)

Portanto, o diretório não está vazio , mas (no CIFS) você não tem como ver isso. O arquivo pode ser visto apenas e, portanto, somente pode ser excluído por um comando em execução no servidor de arquivos que hospeda esse sistema de arquivos.

Camille Goudeseune
fonte
2

Se você estiver usando o btrfs, é possível que seja um diretório vazio com um tamanho de zero diferente de zero. Você pode verificar se este é o caso de:

stat -c %s test

O tamanho i de uma pasta vazia no btrfs deve ser zero. No meu caso, eu tenho 6160 com ~/.config/chromium/Default.

A solução sugerida é desmontar o sistema de arquivos, executar btrfs checkpara confirmar o problema e procurar outros diretórios problemáticos e, finalmente, executar btrfs check --repairpara corrigir. Essa operação é arriscada, portanto, é uma boa idéia fazer backup dos arquivos primeiro.

Fonte: Perguntas frequentes sobre o problema Btrfs

wzhd
fonte
1

Eu tive o mesmo problema no Ubuntu 16.04 e o corrigi por:

  1. esvaziando a pasta lixeira
  2. reiniciando

Abrir e fechar o gerenciador de arquivos não adiantou: apenas a reinicialização funcionou.

dale
fonte
0

tente este comando:

sudo lsof | grep deleted 

Verifique na lista se o seu diretório ainda está em uso. : D

Nesse caso, pare o serviço e você poderá excluir o diretório.

ashwin2011
fonte
Obviamente, o diretório não aparecerá na lista de descritores de arquivos excluídos abertos, se não puder ser excluído. ; -]
David Foerster
0

Esse problema aparece quando essas pastas ou arquivos não são copiados completamente. É um erro de entrada / saída. Tentei excluir com Shift+ Delou através de comandos, mas estes não funcionaram. Tentei clicar com o botão direito e "Mover para a lixeira" e funcionou.

lhodeniz
fonte