Es wurde versucht, das Verzeichnis mit "rm -rf" zu löschen, es wird jedoch die Meldung angezeigt, dass es nicht leer ist

35

Ich habe versucht, ein Verzeichnis mit "rm -rf" zu löschen und erhalte die Meldung "Directory not empty":

Bens-MacBook-Pro:please benjaminhocking$ ls -lart empty_directory/
total 16
drwxr-xr-x  5 benjaminhocking  staff  170 Aug 27 14:46 .
drwxr-xr-x  3 benjaminhocking  staff  102 Aug 27 15:28 ..
Bens-MacBook-Pro:please benjaminhocking$ rm -rf empty_directory/
rm: empty_directory/: Directory not empty
Bens-MacBook-Pro:please benjaminhocking$ rmdir empty_directory/
rmdir: empty_directory/: Directory not empty

Wenn ich dasselbe mit Finder versuche (den Ordner in den Papierkorb ziehen), erhalte ich die Meldung

Der Vorgang kann nicht abgeschlossen werden, da das Element "empty_directory" verwendet wird.

Ich habe es xattr -d com.apple.quarantineaus reinem Aberglauben versucht , aber es hat nichts gebracht.

Ein wahrscheinlich wichtiger Kontext ist, dass sich dieses Verzeichnis ursprünglich in einem Verzeichnis befand, das durch einen Befehl "make clean" gelöscht werden sollte, den ich vor dem Sperren des Terminals für mich ausgegeben hatte, wonach etwas mehr als die Hälfte der anderen Programme, über die ich verfügte Laufen auch gesperrt, einschließlich Skype, und schließlich das Betriebssystem selbst. Schließlich musste ich den Computer neu starten, indem ich die Ein- / Aus-Taste gedrückt hielt.

Bearbeiten zum Hinzufügen: Eine weitere wichtige Information, die ich weggelassen habe, war, dass dies in einem verschlüsselten Ordner à la passiert encfs. Ich konnte den entsprechenden Ordner in der verschlüsselten Seite der Dinge aufspüren und dort löschen. Ich weiß immer noch nicht, warum ich es nicht von der entschlüsselten Seite der Dinge tun konnte, wie ich es normalerweise tue. Ich werde dies vorerst unbeantwortet lassen, falls jemand eine gute Antwort darauf hat.

Ben Hocking
quelle
2
Haben Sie eine andere Shell in diesem Verzeichnis geöffnet oder eine App, die nur damit arbeitet? Der Begriff "wird verwendet" könnte auch bedeuten, dass (obwohl ich nie erfahren habe, dass ich nicht dazu in der Lage bin rmdir- aber es ist oft der Grund, warum man ein Volume nicht aushängen kann).
Izzy
Zu diesem Zeitpunkt waren diese speziellen Befehle noch nicht erteilt worden. Ich hatte kurz zuvor einen vollständigen Neustart durchgeführt.
Ben Hocking
Ich habe manchmal das gleiche Problem mit EncFS und bis jetzt habe ich keine Ahnung, wie ich das lösen soll. Etwas Neues?
Martin Preusse
@emempe: Am Ende habe ich den Ordner im verschlüsselten Bereich gelöscht und dabei den zuletzt geänderten Zeitstempel als meine Kennung verwendet. (Was gefährlich sein kann.) Wenn ich eine bessere Lösung finde, werde ich es Sie wissen lassen.
Ben Hocking
@BenHocking: Das mache ich auch. Passiert selten für mich, also bin ich damit einverstanden. Trotzdem mag ich das Gefühl nicht, dass mein EncFS irgendwie beschädigt wurde ...;) Mein EncFS ist in einer Dropbox, vielleicht eine Verbindung?
Martin Preusse

Antworten:

12

Starten Sie Ihren Computer neu und starten Sie ihn rmdir(1)erneut.

$ rmdir -r empty_directory/

Wenn das nicht funktioniert, versuchen Sie Folgendes:

$ rm -rf empty_directory/

Wenn es immer noch nicht funktioniert, unter der Annahme, dass OS X lsof(8)vorinstalliert ist, geben Sie Folgendes ein:

$ lsof +D empty_directory/

Dies sollte anzeigen, ob Dateien in diesem Verzeichnis von Programmen verwendet werden. Ich denke, dass das HFS + -Dateisystem das Löschen der verwendeten Dateien nicht erlaubt. Wie auch immer, killall(1)alle ausführbaren Dateien, die dieses Verzeichnis verwenden, oder alle darin versteckten Dateien. Es ist wahrscheinlich, dass Finder eine versteckte Datei im empty_directoryVerzeichnis verwendet, um Einstellungen für die Ordneransicht zu speichern. Hoffe das hilft.

PS: Um herauszufinden, ob lsof(8)installiert ist, geben Sie Folgendes ein:

$ lsof

Wenn die Ausgabe so aussieht, lsof(8)ist sie auf Ihrem System installiert.

lsof: /usr/bin/lsof /usr/bin/X11/lsof /usr/share/man/man8/lsof.8.gz

Suchen Sie in diesem Verzeichnis nach versteckten und verschlüsselten Dateien oder Verschlüsselungsschlüsseldateien. Dies könnte der Schuldige sein.

Jonathan Reno
quelle
4

Das Reparieren der Festplatte mit dem Festplatten-Dienstprogramm hat dieses Problem für mich behoben.

Shlok Datye
quelle
Dies funktioniert in den meisten Szenarien, die ich glaube. Total für mich gearbeitet. Thanx
GeekRide
Der spezifische Befehl lautet "Erste Hilfe ausführen ..." im Menü "Datei". Ich habe ein bisschen zu lange in den Menüs nach dem Wort "reparieren" gesucht, bevor mir das aufgefallen ist!
RoG
3

Wenn dies passiert und Sie sicher sind, dass Sie alles löschen möchten, sollten Sie es mit versuchen sudo rm -rf directory/

m1.
quelle
1
Dies funktioniert bei ~ / .Trash aus irgendeinem Grund nicht.
MarcusJ
2
Dies funktioniert überhaupt nicht, es sei denn, es handelt sich um Berechtigungen, die eine andere Fehlermeldung für die Konsole darstellen.
Tresf
2

Ich bin auf genau diesen Fehler gestoßen, als ich auch versucht habe, ein Verzeichnis zu entfernen (rm -r dirname). Ich habe bereits alle Vorschläge ausprobiert, die ich hier gelesen habe, bevor ich diesen Thread gesucht und gefunden habe. Ich weiß nicht, ob es irgendwelche zusätzlichen Punkte gegeben hat, die von der ursprünglichen Frage unbeabsichtigt unangemeldet geblieben sind, aber in meinem Fall war die Wurzel des Problems und die Lösung:

  • Das betreffende Verzeichnis befand sich auf einer im Netzwerk eingebundenen Festplatte

  • Jeder lsVersuch vom Finder oder von der Kommandozeile zeigte nichts als .und..

  • Ich habe mich über den sshBefehl beim Network Disk Server angemeldet und dort überprüft ls -al. Das Ergebnis zeigte zusätzlich zu .und ..mehrere .__filenameElemente mit erweiterten Sicherheitsinformationen (dh +dem Modus angehängt).

Ich glaube , dies sind, oder ähnlich sind, werden Dateien , die ich zum ersten Mal vor Mac OSX Erstellen Jahren festgestellt bei der Verwendung von cp -R, taroder cpiozu archivieren oder verschieben Gruppen von Dateien. Ich hatte damals festgestellt, dass sie verwendet wurden, um einige Dateieigenschaften nach dem Verschieben ordnungsgemäß zurückzusetzen - möglicherweise uid / gid, mode, acls, mtime / utime / ctime usw .; Ich bin nicht wirklich sicher - Eigenschaften , die waren nicht zurückgesetzt worden korrekt vor dieser Zeit durch diese Befehle bekommen (ich erinnere mich , dass OSX verwendet , um zu umfassen mvmacund cpmacBefehle an der Arbeit , um das Problem , bevor diese .__filenameArten von Dateien erscheinen begannen , als die üblichen Formen der Verwendung cp, tar, etc).

Ich hatte noch nie Probleme beim Löschen dieser Dateien, wenn sie auf ein internes, USB- oder Firewire-Laufwerk geschrieben wurden. Dies war das erste Mal, dass ich sie auf einer Netzwerkfestplatte gefunden hatte. Von der Client-Seite des Mounts völlig unerkennbar, aber von der Server-Seite aus in jeder Hinsicht normal.

rm -rf dirname Bei einer Anmeldung auf dem Netzwerk-Festplatten-Server wurde das Verzeichnis zusammen mit seinem Inhalt ordnungsgemäß entfernt.

Es gibt also eine andere Antwort für das, was es wert ist. Eine weitere mögliche Lösung für dieses Problem, wenn es für jeden in Verbindung mit einer Netzwerkfestplatte angezeigt werden soll.

Ken
quelle
2

Versuchte alle Antworten hier ohne Ergebnisse. Ich konnte das Verzeichnis jedoch mit dem Befehl mv beiseite schieben , wodurch ich weitermachen konnte.

Jeremy Ninnes
quelle
2

Die einzige Lösung, die für mich funktioniert hat, war von https://unix.stackexchange.com/questions/234876/unable-to-delete-a-file-whatever-i-do :

Verschiebe sie nach / tmp und starte neu.

Die anderen Optionen, die ich ausprobiert habe, waren:

  • Festplatten-Dienstprogramm - Erste Hilfe.
  • lsof +D bad_file zeigte keine Ausgabe.
  • sudo rm -rf
  • Booten in ein Einzelbenutzerterminal und rm -rf.
Joe
quelle
1
Fsck vom Einzelbenutzerterminal hat weder geholfen rm -rf, noch lsof +Dzeigt es etwas. Seltsamerweise konnte ich die fehlerhaften Verzeichnisse verschieben /tmp, obwohl sie nach dem Neustart nicht entfernt wurden. Das gleiche Problem bleibt bestehen, aber es ist zumindest etwas abgelegen.
Anapsix
1

Zum Wohle der Leser:

Vorsicht rm -rfin so einem Fall! Es kann anderswo zu Problemen kommen, falls es sich um eine Netzwerkfreigabe handelt! Du wurdest gewarnt!

In fast allen Fällen, wenn a directoryleer zu sein scheint, verwenden Sie rmdir directoryoder vielleicht sudo rmdir directory. Verwenden Sie nicht rm(oder delunter Windows). Wenn dies nicht funktioniert, müssen Sie herausfinden, was diese Anforderung blockiert, das beheben und dann erneut versuchen rmdir.

Bitte beachten Sie, dass ich OS-X nicht kenne, aber ich denke, dass die Dinge dort dem Unix / BSD-Verhalten sehr ähnlich sind.

Es ist sehr wahrscheinlich, dass es sich bei dem fraglichen Verzeichnis nur um einen Mount-Punkt (aus dem encfs) handelte oder sich auf einem Mount-Punkt befand, der schreibgeschützt war oder in einem unzulässigen Zustand steckte (wodurch das Entfernen des Verzeichnisses verhindert wurde). Wenn Sie jetzt das Entfernen des Verzeichnisses erzwingen, können sehr schlimme Dinge passieren.

Im guten Fall war das Verzeichnis wirklich leer, so dass das Entfernen (Zerstören des Reiters usw.) keinen weiteren Schaden anrichtete. Im schlimmen Fall war es nicht leer, es schien nur so zu sein, was bedeutet, dass Sie etwas weggeworfen haben, was Sie vielleicht nicht töten wollten. Dies hängt alles vom Mount-Typ, den verwendeten Treibern usw. ab.

Wenn die Dinge einigermaßen gut implementiert sind, sollte normalerweise nichts Schlimmes passieren. Dies ist jedoch nicht der Normalfall. Die Dinge befinden sich bereits in einem seltsamen Zustand, was bedeutet: Etwas stimmt nicht, also versuchen Sie besser nicht, es noch weiter zu verwechseln! Wenn etwas geknackt ist, kann eine falsche Berührung es zerbrechen.

Wenn Sie beispielsweise eine Race-Bedingung auf einer Netzwerkfreigabe erfüllen, werden möglicherweise rm -rfDaten entfernt, die gerade von einer anderen Person auf die Freigabe kopiert wurden.

Es wird jedoch rmdirgarantiert nie Schaden anrichten, abgesehen davon, dass wirklich leere Verzeichnisse entfernt werden. Dies gilt sogar für NFS, da NFS nur auf mkdirund rmdirnirgendwo sonst ein wirklich atomares Verhalten garantiert .

Zu Ihrer Information:

Sie können einen Einhängepunkt mit dem Tool erkennen mountpoint directory. Alternativ können Sie auch in die Ausgabe von schauen mountund versuchen, Ihre Reittiere dort zu finden. Aber Vorsicht, zumindest unter Linux könnte das liegen. Verwenden des mountpointDienstprogramms zuverlässiger, aber weniger bequem.

In diesem Fall haben Sie den Einhängepunkt gefunden. Sie können ihn aushängen und dann das Verzeichnis entfernen. Dies ist die folgende Reihenfolge:

umount directory rmdir directory

Bei Bedarf sudowie gewohnt anwenden.

Anmerkungen:

  • Netzwerkfreigaben können rmdir(und alles andere) aufgrund von Zugriffsrechten verweigert werden.

  • Defekte Dateisysteme können rmdirje nach Fehlerstrategie fehlschlagen. Vielleicht sehen Sie in diesem Fall eine vernünftige Nachricht, vielleicht auch nicht.

  • Unter Linux (und wahrscheinlich jedem modernen Betriebssystem) können Sie den Zugriff auch auf andere Weise einschränken (z. B. nur lesbares Mounten, Funktionen wie in SeLinux usw.). Dies bedeutet dann, dass Sie nicht sehen, dass es sich um einen Einhängepunkt handelt, und Sie sehen nichts Falsches, aber es funktioniert einfach nicht. In diesem Fall müssen Sie nach einem anderen Grund suchen, und es kann sehr tief im Betriebssystem vergraben sein. Es hängt vom jeweiligen Tool ab, ob eine sinnvolle Fehlermeldung angezeigt wird. Vielleicht schau auch mal in das Syslog / Kernel-Log wie dmesgunter Linux (sorry, ich kenne das OS-X-Äquivalent nicht).

  • Beachten Sie, dass die obligatorische Dateisperrung auch eine Quelle sein kann. Während dies unter Windows normal ist, ist es normalerweise nicht der Normalfall für Unix und ich habe es für Verzeichnisse nie gehört. Obligatorische Dateisperren werden von POSIX abgedeckt, sind jedoch optional.

  • In solchen Fällen befindet sich das betreffende Verzeichnis häufig auf einem anderen Dateisystem als gedacht. Sie können die mit dem Befehl herausfinden, df directory(ich glaube , das ist das gleiche unter OS-X).

  • Sie können mit Tools wie statoder statfsim Verzeichnis genauer nachsehen . Diese sind jedoch für normale Menschen ein wenig niedrig, und solche Tools sind für normale Benutzer häufig gut versteckt.

  • Verzeichnisse können Dateien mit lustigen Namen haben. Wie eine Datei, die die Terminalausgabe sofort löscht, so dass es so aussieht, als ob sie nicht da ist. Probieren Sie etwas wie ls -al | lessoder Verwendung so etwas wie Midnight Commander mc.

Es gibt eine Menge anderer Möglichkeiten, einschließlich Bugs, Haxors, Aliens oder vielleicht exotischeren Dingen wie Feen. Aber normalerweise ist es nicht ratsam, dort nachzuschauen, sondern zuerst zu versuchen, den Fehler an Ihrer Seite zu finden, weil "errare humanum est".

Tino
quelle
1

Dies könnte auch ein Fall sein, den ich gerade gelöst habe, in dem sich ein defekter Symlink auf der Serverseite befand und der für den Client über CIFS nicht sichtbar war. Der Symlink füllte ein nicht leeres Verzeichnis, aber der Client konnte den Symlink nicht sehen oder angeben, um das Verzeichnis zu löschen, bevor die Verknüpfung zum Verzeichnis aufgehoben wurde. Da es unsichtbar war, hat es dieses Paradox geschaffen, bei dem es von der Client-Seite aus leer war, aber auf Anfrage von rm "nicht leer" . Wenn Sie über SSH-Zugriff auf den Server verfügen, versuchen Sie es mit einer Shell und prüfen Sie, ob das Verzeichnis wirklich leer ist oder ob die Symlinks möglicherweise beschädigt sind. Ich konnte das auf einem Drobo5N machen und das hat meinen Hintern gerettet.

Jon
quelle
Dies mag für andere in einer ähnlichen Situation hilfreich sein, war aber für mich definitiv nicht der Fall, da ich zu diesem Zeitpunkt mit keinem Server verbunden war.
Ben Hocking
0

Versuchen Sie, dieses Verzeichnis unter Windows zu öffnen. Unter Mac OS wird möglicherweise etwas nicht angezeigt. Ich hatte nach einer Reihe von Kopiervorgängen zwischen Mac und Win PC ein ähnliches Problem: Das Verzeichnis war selbst im Terminal leer, aber unter Windows fand ich eine versteckte Windows-Datei, sodass ich das Verzeichnis erfolgreich von dort entfernte.

contre_force
quelle
0

Im Terminal:

  1. enter sudo su (Die Kommandozeile sollte auf so etwas wie wechseln sh-3.2#.)
  2. Navigieren Sie zu dem übergeordneten Ordner des Ordners, den Sie löschen möchten
  3. eingeben rm -rf TheDirectoryYouWantToDelete
OuzoPower
quelle
0

Ich bin auf dieses Problem gestoßen, als ich versucht habe, einen Ordner zu löschen, den eine Anwendung verwendet hat. Wenn ich die Anwendung geschlossen habe, konnte ich den Ordner entfernen, ohne diesen Fehler zu verursachen. Versuchen Sie daher, die Anwendungen zu beenden, die sie möglicherweise verwenden.

Josh Correia
quelle