Wie entferne ich einen unendlich wiederkehrenden Verzeichnisbaum?


9

Auf einem unserer Windows 2003-Dateiserver hat es jemand oder etwas irgendwie geschafft, unendlich wiederkehrende Verzeichnisbäume in einigen Home-Ordnern der Benutzer zu erstellen, und sie können nicht gelöscht werden.

Sie landen mit so etwas:

D:\Student\2012\user.name\servername\student\2012\user.name\servername\student\2012\...

Und es geht unendlich weiter, soweit ich das beurteilen konnte.

Der Versuch, den Verzeichnisbaum von dem System zu löschen, auf dem er sich befindet, führt zu "Fehler beim Löschen der Datei oder des Ordners: Datei kann nicht gelöscht werden:". Der Versuch, es von einem Windows 7-System zu löschen, das mit der Netzwerkfreigabe verbunden ist, führt zu einem Fehler "Ordner wird verwendet".

Wenn Sie bis zum Ende der Verzeichnisstruktur nach unten navigieren, gelangen Sie schließlich zu einem Verzeichnis, das nicht geöffnet oder gelöscht werden kann (wenn Sie mit der rechten Maustaste klicken, wird keine der Standardoptionen angezeigt). Wenn Sie jedoch versuchen, dasselbe Verzeichnis von einer Freigabe auf einem anderen System aus zu öffnen Es kann geöffnet werden, Windows Explorer wird jedoch extrem langsam.

Ich habe die Vorschläge in diesem Beitrag ausprobiert sowie den Server mit einer Linux-CD gebootet und versucht, das Verzeichnis rm -rf zu erstellen. Beide haben nicht funktioniert.

Es ist ein Mysterium.

Bearbeiten: Ich könnte auch hinzufügen, dass es möglich ist, die Verzeichnisse umzubenennen, nur nicht zu entfernen.


1
Ein ähnliches Problem wurde bei Serverfehler behoben .
Lilienthal

Antworten:


14

Ich hatte auch einen endlos rekursiven Ordner, der von einer Java-IDE erstellt wurde, und konnte ihn weder im Windows Explorer noch an der Eingabeaufforderung cmd löschen.

Als ich git installiert habe, habe ich auch git-bash installiert. In git-bash können Sie den folgenden Befehl ausgeben:

rm -rfd recursive_folder_name

und es wird sich darum kümmern.


Wichtiger Hinweis: Dies kann sehr viel Zeit in
Anspruch nehmen

funktioniert auch, wenn Sie ein VMware-basiertes Linux verwenden und das Laufwerk mounten (wenn es extern ist ...)
Wolfgang Fahl

4

Es ist möglich, dass irgendwo ein symbolischer Link zu einem Ordner vorhanden ist, höchstwahrscheinlich der zweite studentin Ihrem Pfad.

Versuchen Sie, den Befehl auszuführen:

dir D:\Student\2012\user.name\servername

und prüfen Sie, ob studentDIR oder SYMLINK / JUNCTION markiert ist.

Dies ist beispielsweise eine typische Ausgabe des dirBefehls:

04/24/2012  10:58 PM    <DIR>          .
04/24/2012  10:58 PM    <DIR>          ..
04/24/2012  10:58 PM    <SYMLINKD>     a [h:\a]

Sie sehen, dass die ersten beiden Einträge als markiert sind DIR, während der dritte (ein symbolischer Link zu einem anderen Ordner) als markiert ist SYMLINKD. In Ihrem Fall (Windows 2003) gibt es meiner Meinung nach JUNCTIONs anstelle von SYMLINKs.

Wenn der studentOrdner eine symbolische Verknüpfung oder Kreuzung ist, führen Sie die folgenden Befehle aus:

cd /d D:\Student\2012\user.name\servername
rmdir student

und damit die Rekursion loswerden.


Keines der Verzeichnisse ist ein Symlink. Ich habe das erste Paar und das am "Ende" überprüft, wo es hängen bleibt.
EnglishInfix

2

Es ist möglich, dass jeder, der in diesem Ordner gearbeitet hat, einen Verbindungspunkt erstellt, der eine Schleife von bis user.namezu erstellt servername, wodurch ein Verzeichnisbaum mit der Endlosschleife erstellt wird.

Junctions sind eine Funktion des NTFS-Dateisystems, mit der Sie eine symbolische Verknüpfung zu einem Verzeichnis erstellen können, das als Alias ​​für das Verzeichnis fungiert. http://en.wikipedia.org/wiki/NTFS_junction_point

Sie können im Abschnitt "Beobachtete Effekte" der Wiki-Seite das von Ihnen beschriebene Problem sehen.

Versuchen Sie, dieses Dienstprogramm auszuführen, um Junctions unter diesem Server aufzulisten:

http://technet.microsoft.com/en-us/sysinternals/bb896768

Es sollte Ihnen auch die Möglichkeit geben, den Knotenpunkt zu löschen.


2

Ich hatte ein ähnliches Problem, als Eclipse einen sehr tiefen Ordnerbaum erstellte, den ich nicht löschen konnte. Da es jedoch möglich war, Ordner zu verschieben und umzubenennen, habe ich eine Batch-Datei geschrieben, um sie zu bearbeiten. Für einen scheinbar unendlich tiefen Ordnerbaum von FOLDERNAME im C-Verzeichnis, dh

C:/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/...

Batch-Datei:

:LoopStart
REN "C:/*FOLDERNAME*" "*TEMPFOLDERNAME*"
MOVE "C:/*TEMPFOLDERNAME*/*FOLDERNAME*" "C:/"
RMDIR /S /Q "C:/*TEMPFOLDERNAME*"
GOTO LoopStart
:LoopEnd

Dies funktioniert, weil TEMPFOLDERNAME jetzt ein Baum endlicher Länge ist (ein einzelner Ordner mit nichts darin) und der massive FOLDERNAME-Baum jedes Mal, wenn die Schleife ausgeführt wird, einen Ordner weniger hat, der schließlich den unteren Rand erreicht, indem ein Ordner oben entfernt wird.


1

Ich bin auf dasselbe Problem mit mehr als 5000 verzeichnistiefen Ordnern gestoßen, das eine Java-Anwendung gemacht hat, und habe Folgendes geschrieben:

https://gitlab.imanolbarba.net/imanol/DiREKT

Es hat das Ganze nach einer Weile entfernt, aber es hat es geschafft, den Job zu erledigen. Ich hoffe, es hilft Menschen, die (wie ich) auf dasselbe frustrierende Problem stoßen


1

Löste meine Endlosschleifenverzeichnisse mit diesem Skript:

:LoopStart
takeown /F "c:\temp\Application Data"
Attrib -S -H "c:\temp\Application Data"
REN "C:\temp\Application Data" "5"
takeown /F "c:\temp\5\Application Data"
Attrib -S -H "c:\temp\5\Application Data"
MOVE "c:\temp\5\Application Data" "C:\temp"
Del /F /S /Q c:\temp\5\*.*
RMDIR /S /Q "C:\temp\5"
GOTO LoopStart
:LoopEnd

0

Ich hatte das gleiche Problem. Der Ordner, den ich löschen wollte, enthielt einen endlosen Baum von Links mit demselben Namen, und jeder Versuch, ihn zu löschen, führte dazu, dass Windows den Fehler "Datei zu lang ..." auslöste. Es ist fehlgeschlagen, unabhängig von dem Befehl, den ich versucht habe, einschließlich aller oben genannten Methoden. Daher habe ich Cygwins Befehl "rm" in einem cmd-Fenster direkt über dem betreffenden Ordner ausprobiert. Ich habe "rm -r -f [Ordner]" eingegeben und der Ordner wurde ohne Beanstandung gelöscht.

Sie können Cygwin kostenlos von https://cygwin.com/install.html herunterladen . Es ist im Grunde eine UNIX-Shell für Windows, die alle gängigen Befehle enthält (z. B. ls, rm, du und cat), aber auch eine Menge Pakete enthält, die, wenn alle heruntergeladen würden, etwa 1 GB Speicherplatz beanspruchen würden. Ich glaube, das Standard-Download-Paket enthält die UNIX-Befehle. Wenn nicht, befinden sie sich im "utils" -Paket, wenn Speicherplatz zur Verfügung steht.

HINWEIS: Sie müssen keine Cygwin-Befehle im nativen Bash-Shell-Fenster ausführen. Sie können in einem Cmd-Fenster ausgeführt werden, indem Sie den Pfad zum Verzeichnis "bin" von cygwin zu Ihrer Umgebungsvariablen PATH Ihres Systems hinzufügen. In meinem Fall habe ich "C: \ cygwin64 \ bin" hinzugefügt.

Ich hoffe das hilft.


0

Ich habe hier das gleiche Problem.

In anderen Beiträgen wurde vorgeschlagen, einen leeren Ordner über die Netzwerkfreigabe mit MS RoboCopy in den Zielordner zu spiegeln.

Im richtigen Moment starte ich dies mit "> nul", um es zu beschleunigen (das tut es wirklich):

"C: \ TEMP" ist ein leerer Ordner und "W: \ TMP" ist der betroffene Ordner:

robocopy / mir c: \ temp \ 127.0.0.1 \ w $ \ tmp> nul


1
Willkommen bei Super User. Wenn Sie eine Lösung von einer anderen Stelle zitieren, fügen Sie bitte die Namensnennung und einen Link zur weiteren Lektüre hinzu. Antworten sollen endgültige Lösungen sein. Wenn Sie dies noch versuchen, ist das Veröffentlichen möglicherweise verfrüht.
Fixer1234

0

Ich hatte dies auch auf einem eigenständigen Windows 10-System. C: \ Benutzer \ Name \ Wiederholen \ Wiederholen \ Wiederholen \ Wiederholen \ Wiederholen \ Wiederholen \ Wiederholen scheinbar bis ins Unendliche.

Laut OP konnte ich mit Windows oder der Eingabeaufforderung zum 50. und nicht weiter navigieren. Ich konnte es nicht genau wie beschrieben löschen oder darauf klicken usw.

C ist meine Sprache, also habe ich irgendwann ein Programm mit einer Schleife von Systemaufrufen geschrieben, die sich wiederholen, bis sie fehlschlagen. Gemäß dem DOS-Code von JohnO habe ich ein Verzeichnis mit dem Namen tmp erstellt und Repeat \ Repeat in dieses Verzeichnis verschoben, den jetzt leeren Ordner Repeat gelöscht und tmp \ Repeat wieder in den aktuellen Ordner verschoben. Wieder und wieder!

 while (times<2000)
 {
  ChkSystem("move Repeat\\Repeat tmp");
  ChkSystem("rd Repeat");
  ChkSystem("move tmp\\Repeat Repeat");
  ++times;
  printf("Removed %d nested so far.\n", times);
 }

ChkSystem führt nur einen system () -Aufruf aus, überprüft den Rückgabewert und stoppt, wenn er fehlschlägt.

Wichtig ist, dass es mehrmals fehlgeschlagen ist. Ich dachte, mein Programm funktioniert vielleicht nicht oder es ist doch unendlich lange her. Ich hatte dies jedoch schon einmal bei Systemaufrufen, bei denen die Dinge nicht synchronisiert wurden. Deshalb habe ich das Programm einfach erneut ausgeführt und es wurde dort fortgesetzt, wo es aufgehört hat. Denken Sie also nicht, dass Ihr Programm nicht funktioniert. Insgesamt wurden sie nach etwa 20-maligem Ausführen alle gelöscht. Insgesamt waren es ursprünglich etwa 1280 Ordner. Keine Ahnung, was es verursacht hat. Verrückt.


0

Mit 3-Ebenen-Loop-Verzeichnissen:

:LoopStart
takeown /F "D:\temp\MyApp"
Attrib -S -H "D:\temp\MyApp"
REN "D:\temp\MyApp" "5"
takeown /F "D:\temp\5\MqttObserver"
Attrib -S -H "D:\temp\5\MqttObserver"
REN "D:\temp\5\MqttObserver" "6"
takeown /F "D:\temp\5\6\PackageFiles"
Attrib -S -H "D:\temp\5\6\PackageFiles"
REN "D:\temp\5\6\PackageFiles" "7"
MOVE "c:\temp\5" "C:\temp"
Del /F /S /Q c:\temp\5\*.*
RMDIR /S /Q "C:\temp\5"
MOVE "c:\temp\6" "C:\temp"
Del /F /S /Q c:\temp\6\*.*
RMDIR /S /Q "C:\temp\6"
MOVE "c:\temp\7" "C:\temp"
Del /F /S /Q c:\temp\7\*.*
RMDIR /S /Q "C:\temp\7"
GOTO LoopStart
:LoopEnd

Erklärung zum Code? <:: ;; :: ;; :: ;; :: ;; :: (| XXXX |) o ~
Pimp Juice IT

0

Ich habe es behoben, indem ich chkdsk / f über die Administratorkonsole ausgeführt, neu gestartet und dann den Datei-Explorer zum Löschen verwendet habe. Obwohl Windows sich über die lange Datei / den langen Ordner beschwert hat, wurde der problematische rekursive Ordner entfernt, sobald ich das Löschen bestätigt hatte.

Ich bin mir nicht sicher, ob es andere Probleme gibt, die ich möglicherweise mit der alten Option chkdsk in meinem Windows 7 Pro-Dateisystem erstellt habe.


0

Für mich hat diese Variante der Windows RoboCopy-Methode funktioniert:

mkdir c:\empty
robocopy c:\empty toolongdir /purge
rmdir c:\empty
rmdir toolongdir

Ja, es braucht Zeit, aber es hat den Job gemacht.


-1

Führen Sie MS ROBOCOPY einfach wie folgt aus:

  1. Erstellen Sie einen "leeren Ordner" mit demselben Namen wie der Ordner, der den "unendlich wiederkehrenden Verzeichnisbaum" enthält.
  2. Führen Sie die ROBOCOPY über die Befehlszeile mit der Option / MIR aus.
  3. Nach dem Ende von ROBOCOPY (und es kann einige Sekunden dauern),
  4. Löschen Sie den Ordner mit dem "unendlich wiederkehrenden Verzeichnisbaum", der jetzt ein "leerer Ordner" ist.
  5. Löschen Sie auch den "leeren Ordner", den Sie in Schritt 1 erstellt haben.

. . . . . . . . . . . . . . .

ROBOCOPY "C: \ anyplace \ BADFOLDER" "C: \ where \ BADFOLDER" / MIR

Wo:

C: \ anyplace \ BADFOLDER .. ist der "leere Ordner", den Sie erstellt haben, und

C: \ where \ BADFOLDER .. ist der Ordner, in dem sich der "unendlich wiederkehrende Verzeichnisbaum" befindet.

. . . . . . . . . . . . . . .

Nachdem ROBOCOPY ausgeführt wurde. Sie haben jetzt zwei "leere" BADFOLDER.

Löschen Sie zum Bereinigen beide

C: \ anyplace \ BADFOLDER und C: \ where \ BADFOLDER

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.