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.quarantine
aus 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.
quelle
rmdir
- aber es ist oft der Grund, warum man ein Volume nicht aushängen kann).Antworten:
Starten Sie Ihren Computer neu und starten Sie ihn
rmdir(1)
erneut.Wenn das nicht funktioniert, versuchen Sie Folgendes:
Wenn es immer noch nicht funktioniert, unter der Annahme, dass OS X
lsof(8)
vorinstalliert ist, geben Sie Folgendes ein: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 imempty_directory
Verzeichnis verwendet, um Einstellungen für die Ordneransicht zu speichern. Hoffe das hilft.PS: Um herauszufinden, ob
lsof(8)
installiert ist, geben Sie Folgendes ein:Wenn die Ausgabe so aussieht,
lsof(8)
ist sie auf Ihrem System installiert.Suchen Sie in diesem Verzeichnis nach versteckten und verschlüsselten Dateien oder Verschlüsselungsschlüsseldateien. Dies könnte der Schuldige sein.
quelle
Das Reparieren der Festplatte mit dem Festplatten-Dienstprogramm hat dieses Problem für mich behoben.
quelle
Wenn dies passiert und Sie sicher sind, dass Sie alles löschen möchten, sollten Sie es mit versuchen
sudo rm -rf directory/
quelle
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
ls
Versuch vom Finder oder von der Kommandozeile zeigte nichts als.
und..
Ich habe mich über den
ssh
Befehl beim Network Disk Server angemeldet und dort überprüftls -al
. Das Ergebnis zeigte zusätzlich zu.
und..
mehrere.__filename
Elemente 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
,tar
odercpio
zu 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 umfassenmvmac
undcpmac
Befehle an der Arbeit , um das Problem , bevor diese.__filename
Arten von Dateien erscheinen begannen , als die üblichen Formen der Verwendungcp
,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.
quelle
Versuchte alle Antworten hier ohne Ergebnisse. Ich konnte das Verzeichnis jedoch mit dem Befehl mv beiseite schieben , wodurch ich weitermachen konnte.
quelle
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 :
Die anderen Optionen, die ich ausprobiert habe, waren:
lsof +D bad_file
zeigte keine Ausgabe.rm -rf
.quelle
rm -rf
, nochlsof +D
zeigt 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.Zum Wohle der Leser:
Vorsicht
rm -rf
in 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
directory
leer zu sein scheint, verwenden Siermdir directory
oder vielleichtsudo rmdir directory
. Verwenden Sie nichtrm
(oderdel
unter Windows). Wenn dies nicht funktioniert, müssen Sie herausfinden, was diese Anforderung blockiert, das beheben und dann erneut versuchenrmdir
.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 -rf
Daten entfernt, die gerade von einer anderen Person auf die Freigabe kopiert wurden.Es wird jedoch
rmdir
garantiert nie Schaden anrichten, abgesehen davon, dass wirklich leere Verzeichnisse entfernt werden. Dies gilt sogar für NFS, da NFS nur aufmkdir
undrmdir
nirgendwo 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 schauenmount
und versuchen, Ihre Reittiere dort zu finden. Aber Vorsicht, zumindest unter Linux könnte das liegen. Verwenden desmountpoint
Dienstprogramms 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
sudo
wie gewohnt anwenden.Anmerkungen:
Netzwerkfreigaben können
rmdir
(und alles andere) aufgrund von Zugriffsrechten verweigert werden.Defekte Dateisysteme können
rmdir
je 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
dmesg
unter 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
stat
oderstatfs
im 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 | less
oder Verwendung so etwas wie Midnight Commandermc
.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".
quelle
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.
quelle
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.
quelle
Im Terminal:
sudo su
(Die Kommandozeile sollte auf so etwas wie wechselnsh-3.2#
.)rm -rf TheDirectoryYouWantToDelete
quelle
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.
quelle