Pourquoi ai-je le message “Répertoire non vide” lorsque j'essaie de supprimer un répertoire vide?

37

J'ai ce répertoire vide, mais le message d'erreur suivant continue à apparaître:

Cannot remove test: Directory not empty

Je sais que cette question a été posée à maintes reprises, mais aucune d’entre elles n’a aidé.

J'ai essayé ls -lade m'assurer qu'il n'y avait pas de fichiers cachés, et il ne semble pas y en avoir: entrez la description de l'image ici

J'ai essayé sudo rmdir testaussi bien sudo rm -rf test, et je ne sais pas ce qui ne va pas.

J'ai lu que cela pourrait être un problème avec le système de fichiers, mais je ne sais pas comment je pourrais y remédier.

brique
la source
Essayezsudo fsck /
ike
2
Est-ce un répertoire normal ou un point de montage? S'il s'agit d'un point de montage, vous devez le démonter avant de le supprimer. S'il s'agit d'un répertoire normal, il peut parfois y avoir des descripteurs ouverts à l'origine de ce problème. Redémarrez votre ordinateur une fois et essayez de le supprimer.
vembutech
@rbrick Est test- ce que le nom de votre utilisateur est- il connecté ? quelle est la sortie de echo $USER? et ce echo $HOME?
αғsнιη
1
Je suis confus, pourquoi l'utilisateur ne dispose-t-il pas d'autorisations d'exécution sur le répertoire, mais du groupe?
Julian Stirling
2
duplication possible de Comment supprimer un répertoire non vide dans Terminal?
Radu Rădeanu

Réponses:

36

J'ai eu le même problème sur un disque dur externe, j'ai essayé de nombreuses manières en utilisant la ligne de commande, mais j'ai échoué à chaque fois. C'est ce qui a fonctionné pour moi:

  1. Clic droit sur le dossier
  2. Mettre à la corbeille
  3. Poubelle vide

Oui, c'est idiot mais ça a fonctionné pour moi (je ne sais pas vraiment comment et pourquoi, mais ce foutu dossier n'existe plus)

Marco Ottina
la source
J'ai le même problème et votre réponse fonctionne. Pas tout à fait sûr de ce que la bêtise est arrivé, et pourquoi "-rf" n'a pas réussi à supprimer un dossier non vide.
Artm
3
Qu'est-ce qui vient de se passer ici? Pourquoi cela a-t-il fonctionné?
Sahil Arora
Qu'est-il arrivé? Honnêtement, je ne sais pas. Le fichier du dossier a peut-être été corrompu pour une raison quelconque: un indicateur du type "is-empty" ou le compteur de fichier du type "how-many-file-inside" a été défini sur une valeur erronée. Parfois, de telles erreurs peuvent être causées par des dommages sur le disque dur. Pourquoi cela a-t-il fonctionné? Je ne sais pas comment les commandes sont implémentées (pensez à C), mais je suppose qu'ils vérifient ces indicateurs et compteurs avant d'agir (je veux dire, si le compteur de fichiers> 0, alors "erreur: le répertoire n'est pas vide" et abandonne), en vidant le Corbeille supprimer directement le dossier et tous ses fichiers et sous-dossiers sans aucune sorte de vérification.
Marco Ottina
Peut-être que supprimer un dossier via la ligne de commande nécessite certaines conditions, comme le vide du dossier, (car la suppression du nœud du dossier du système de fichiers ne supprime que ce seul nœud de liaison et exige que le dossier soit vide afin qu'aucun autre nœud de fichier ne soit "oublié". "via le système de fichiers en raison de la perte du lien intermédiaire vers eux, représenté par le dossier) .. et la suppression d'un dossier par un clic droit -> supprimer ou vider la corbeille supprime le dossier ET tous les fichiers et sous-dossiers de manière récursive, sans se soucier des drapeaux, des compteurs et des trucs comme ça (donc, aucun contrôle n'est effectué)
Marco Ottina
1
Dans mon cas, le sous-répertoire en question se trouvait dans un dossier partagé entre mon Mac et une machine virtuelle Linux, et j'essayais de supprimer le dossier du côté machine virtuelle Linux. Il semble que le côté Mac se soit tenu à des dossiers. Faire du rm -rfcôté Mac a fonctionné.
MindJuice
5

J'ai gagné 10 + système double Ubuntu installé. Et les deux systèmes partagent les partitions de Windows.

Récemment, j'ai également rencontré l'impossibilité de supprimer des dossiers vides dans ces partitions sous Ubuntu. Je ne peux pas trouver de solution pour le résoudre sous Linux.

Cependant, après avoir basculé vers Windows, et exécuter

chkdsk

via cmdpour le disque cible. Quelques erreurs vérifiées. et puis je cours

chkdsk /F

corriger l'erreur de disque.

Après cela, je suis en mesure de supprimer ces dossiers maintenant.

e-cloud
la source
2
Cette méthode fonctionne pour moi. Je pense qu'il est également important de noter que la partition partagée est au format NTFS et qu'elle est probablement corrompue.
Krismath
4

Vous pouvez le supprimer en tapant sudo rm -rf {dir_name}. Le répertoire a peut-être été configuré pour une autorisation en lecture seule. J'espère que la commande donnée peut supprimer le dossier.

Carcajou
la source
Je comprends Directory not emptyquand même. Cela semble étrange, alors j'ai enregistré mon écran pour le prouver.
naXa
Cette commande dans la réponse fonctionne même si le répertoire a un contenu et également avec des sous-répertoires.
Wolverine
Ce comportement étrange a été causé par des erreurs dans la partition NTFS. résolu avec chkdsk /F.
naXa
4

J'ai eu le même problème pas en mesure de supprimer le répertoire car il n'est pas vide.

Cette séquence d'opérations a fonctionné pour moi.

  1. De la ligne de commande en premier

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

La commande ci-dessus aide ubuntu à ignorer le répertoire n'est pas vide.

  1. Ensuite, allez simplement dans le dossier et Maj + Suppr. C'est tout.
Amit
la source
3

Solution graphique

  1. Déplacer ou couper et coller le dossier dans le dossier corbeille
  2. vider la poubelle

c'est fait.

Solution en ligne de commande

sudo mv folder_error/ .local/share/Trash

vous pouvez effacer avec trash-cli: trash-empty ou

sudo rm -fr ~/.local/share/Trash/*
Kadir Y.
la source
1
Je pense que la solution de ligne de commande ici est en fait une solution générale. Déplacez le dossier vide vers un autre emplacement et supprimez-le une fois déplacé. Par exemple, quelque chose comme ça mkdir a ; mv test a/ ; rm -rf a/test ; rm -rf a. Une approche comme celle-là a fonctionné pour moi (bien que je ne sache pas pourquoi), et je n’ai pas besoin d’un accès root.
Jake Fisher
2

Si le répertoire fait partie d'un système de fichiers monté avec CIFS (également appelé samba) et qu'il contient un fichier qui est un lien symbolique brisé, il lsne mentionne pas ce fichier. (J'observe ce bogue sur un client CIFS exécutant 14.04.2 LTS et un serveur exécutant 12.04.5 LTS.)

Donc, le répertoire n'est pas vide , mais (sur CIFS) vous n'avez aucun moyen de le voir. Le fichier peut uniquement être vu, et donc ne peut être supprimé, que par une commande exécutée sur le serveur de fichiers hébergeant ce système de fichiers.

Camille Goudeseune
la source
2

Si vous utilisez btrfs, il s’agit peut-être d’un répertoire vide avec un i_size différent de zéro. Vous pouvez vérifier si c'est le cas avec:

stat -c %s test

La taille d'un dossier vide dans btrfs doit être zéro. Dans mon cas, j'ai 6160 avec ~/.config/chromium/Default.

La solution suggérée consiste à démonter le système de fichiers, à l'exécuter btrfs checkpour confirmer le problème et à rechercher d'autres répertoires posant problème, puis à l'exécuter btrfs check --repairpour résoudre le problème. Cette opération comporte toutefois des risques. Il est donc judicieux de commencer par sauvegarder les fichiers.

Source: FAQ sur les problèmes de Btrfs

wzhd
la source
1

J'ai eu le même problème sur Ubuntu 16.04 et je l'ai corrigé par:

  1. vider la corbeille
  2. redémarrage

Ouvrir et fermer le gestionnaire de fichiers ne sert à rien - seul le redémarrage a fonctionné.

vallée
la source
0

essayez cette commande:

sudo lsof | grep deleted 

Vérifiez dans la liste si votre répertoire est toujours en cours d'utilisation. :RÉ

Si tel est le cas, arrêtez le service et vous pourrez supprimer le répertoire.

ashwin2011
la source
Évidemment, le répertoire ne figurera pas dans la liste des descripteurs de fichiers ouverts et supprimés s'il ne peut pas être supprimé. ; -]
David Foerster
0

Ce problème apparaît lorsque ces dossiers ou fichiers ne sont pas copiés complètement. C'est une erreur d'entrée / sortie. J'ai essayé de supprimer avec Shift+ Delou via des commandes, mais celles-ci ne fonctionnaient pas. J'ai essayé un clic droit et "Move to Trash" et cela a fonctionné.

lhodeniz
la source