Perché visualizzo "Directory non vuota" quando provo a rimuovere una directory vuota?


37

Ho questa directory vuota, ma continuo a ricevere il seguente messaggio di errore:

Cannot remove test: Directory not empty

So che questa domanda è stata posta molte volte, ma nessuna di queste ha aiutato.

Ho cercato ls -ladi assicurarmi che non ci fossero file nascosti e non sembra esserci: inserisci qui la descrizione dell'immagine

Ho provato sudo rmdir testcosì come sudo rm -rf test, e io non so che cosa è sbagliato.

Ho letto che potrebbe essere un problema con il file system, ma non ho idea di come fare per risolverlo.


Provasudo fsck /
Ike,

2
È una directory normale o un punto di montaggio. Se si tratta di un punto di montaggio, è necessario smontarlo prima di eliminarlo. Se è una directory normale, a volte potrebbero esserci degli handle aperti che causano questo problema. Riavvia il computer una volta e prova a eliminarlo.
Vembutech,

@rbrick Il testnome dell'utente è il tuo login? Qual è l'output di echo $USER? e cosa echo $HOME?
αғsнιη,

1
Sono confuso, perché l'utente non ha i permessi di esecuzione sulla directory, ma il gruppo lo fa?
Julian Stirling,

Risposte:


36

Ho avuto lo stesso problema su un disco rigido esterno, ho provato in molti modi usando la riga di comando, ma ho fallito ogni volta. Questo è ciò che ha funzionato per me:

  1. Fare clic con il tasto destro sulla cartella
  2. Sposta nel cestino
  3. Svuota la spazzatura

Sì, è sciocco ma ha funzionato per me (non so davvero come e perché, ma la maledetta cartella non esiste più)


Ho avuto lo stesso problema e la tua risposta funziona. Non sono sicuro di cosa sia successa la cosa stupida e perché "-rf" non sia riuscito a rimuovere una cartella non vuota.
artm

3
Cosa è appena successo qui? Perché ha funzionato?
Sahil Arora,

Quello che è successo? Onestamente, non lo so. Forse, il file della cartella è stato danneggiato per qualche motivo: un flag come "is-empty" o il contatore dei file come "how-many-file-inside" è stato impostato su un valore errato. A volte, errori del genere potrebbero essere causati da danni al disco rigido. Perché ha funzionato? Non so come vengano implementati i comandi (pensa a C), ma immagino che controllino quei flag e contatori prima di agire (voglio dire, se il contatore file> 0 allora "errore: directory non vuota" e annulla), mentre svuota il cestino rimuove direttamente la cartella e tutti i suoi file e sottocartelle senza alcun tipo di controllo.
Marco Ottina,

Forse, l'eliminazione di una cartella tramite la riga di comando richiede alcune condizioni, come il vuoto della cartella, (poiché la rimozione del nodo della cartella dal file system rimuove solo quel singolo nodo di collegamento e richiede che la cartella sia vuota in modo che nessun altro file-nodo venga "dimenticato" "attraverso il file system a causa della perdita del collegamento intermedio a loro, rappresentato dalla cartella) .. e dell'eliminazione di una cartella con il clic destro -> elimina o svuota il cestino rimuove la cartella E tutti i file e le sottocartelle in modo ricorsivo, senza preoccuparsi delle bandiere, contatori e cose del genere (quindi, non vengono eseguiti controlli)
Marco Ottina,

1
Nel mio caso, la sottodirectory in questione si trovava in una cartella condivisa dal mio Mac a una macchina virtuale Linux e stavo cercando di eliminare la cartella dal lato macchina virtuale Linux. Sembra che il lato Mac stesse trattenendo alcune cartelle. Fare rm -rfdal lato Mac ha funzionato.
MindJuice,

5

Ho installato 10 + Ubuntu doppio sistema installato. Ed entrambi i sistemi condividono le partizioni di Windows.

Di recente, ho anche riscontrato l'incapacità di eliminare le cartelle vuote in quelle partizioni sotto Ubuntu. Non riesco a trovare una soluzione per risolverlo su Linux.

Tuttavia, dopo che passo a Windows ed eseguo

chkdsk

via cmdper il disco di destinazione. Alcuni errori sono stati estratti. e poi corro

chkdsk /F

per correggere l'errore del disco.

Al termine, sono in grado di eliminare quelle cartelle ora.


2
Questo metodo funziona per me. Penso che sia anche importante notare che le partizioni condivise sono formattate NTFS e che probabilmente sono danneggiate.
Krismath,

4

Puoi cancellarlo digitando sudo rm -rf {dir_name}. La directory potrebbe essere stata impostata sull'autorizzazione di sola lettura. Spero che il comando dato possa cancellare la cartella.


Ricevo Directory not emptycomunque. Sembra strano, quindi ho registrato il mio schermo per dimostrarlo.
naXa

Quel comando nella risposta funziona anche se la directory ha contenuti e anche con le sottodirectory.
Wolverine,


questo strano comportamento è stato causato da errori nella partizione NTFS. risolto con chkdsk /F.
naXa

4

Ho avuto lo stesso problema non in grado di rimuovere la directory in quanto non è vuota.

Questa sequenza di operazioni ha funzionato per me.

  1. Dalla prima riga di comando

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

Il comando sopra aiuta Ubuntu a ignorare la directory non è vuota.

  1. Quindi vai alla cartella e Maiusc + Canc. Questo è tutto.

3

Soluzione GUI

  1. Sposta o taglia e incolla la cartella nella cartella cestino
  2. svuota il cestino

è fatta.

Soluzione da riga di comando

sudo mv folder_error/ .local/share/Trash

puoi cancellare con trash-cli: cestino-vuoto o

sudo rm -fr ~/.local/share/Trash/*

1
Penso che la soluzione da riga di comando qui sia in realtà una soluzione generale. Spostare la cartella vuota in un'altra posizione e rimuoverla una volta spostata. Ad esempio, qualcosa del genere mkdir a ; mv test a/ ; rm -rf a/test ; rm -rf a. Un approccio del genere ha funzionato per me (anche se non ho idea del perché), e non avevo bisogno dell'accesso root.
Jake Fisher,

2

Se la directory fa parte di un filesystem montato con CIFS (aka samba) e contiene un file che è un collegamento simbolico interrotto, lsnon riesce a menzionare quel file. ( Osservo questo errore su un client CIFS che esegue 14.04.2 LTS e un server che esegue 12.04.5 LTS.)

Quindi la directory non è vuota , ma (su CIFS) non hai modo di vederlo. Il file può essere visto e quindi cancellato solo da un comando in esecuzione sul fileserver che ospita quel filesystem.


2

Se stai usando btrfs, è probabilmente una directory vuota con un i_size diverso da zero. Puoi verificare se questo è il caso di:

stat -c %s test

L'i_size di una cartella vuota in btrfs dovrebbe essere zero. Nel mio caso, ho ottenuto 6160 con ~/.config/chromium/Default.

La soluzione suggerita è di smontare il filesystem, eseguire btrfs checkper confermare il problema e verificare la presenza di altre directory problematiche, e infine eseguire btrfs check --repairper risolvere. Questa operazione è rischiosa, quindi è una buona idea fare prima il backup dei file.

Fonte: FAQ sui problemi di Btrfs


1

Ho avuto lo stesso problema su Ubuntu 16.04 e l'ho risolto con:

  1. svuotare la cartella cestino
  2. riavvio

L'apertura e la chiusura del file manager non sono andate bene, solo il riavvio ha funzionato.


0

prova questo comando:

sudo lsof | grep deleted 

Controlla nell'elenco se la tua directory è ancora in uso. : D

In tal caso, interrompere il servizio e sarà possibile eliminare la directory.


Ovviamente la directory non verrà visualizzata nell'elenco dei descrittori di file aperti ed eliminati se non può essere eliminata. ; -]
David Foerster,

0

Questo problema si verifica quando tali cartelle o file non vengono copiati completamente. È un errore di input / output. Ho provato a eliminare con Shift+ Delo tramite i comandi, ma questi non hanno funzionato. Ho provato a fare clic destro e "Sposta nel cestino" e ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.