Windows: Wie ein rekursives Verzeichnis löschen ?

#4137712
Lesenswert?

Bei der Installation der Arduino IDE Version 1.6.4 ist ein "rekursives" 
Verzeichnis erzeugt worden. libraries\libraries\libraries ... usw.
Das Ende des Baumes kann ich nicht erreichen. Normales Löschen geht 
nicht,
da "Der Ordner enthält Namen die für den Papierkorb zu lang sind"; ja 
welches Wunder.
Wie kann ich dieses leere Verzeichnis mit seinen gesamten Unterordnern 
löschen ?
#4137788
Lesenswert?

Hallo Steffen,

weil das nicht funktioniert !
"Die Quelldateinamen sind zu lang für das Dateisystem."
Verschieben, Dateinamen kürzen usw. blablabla
Mit rd pder rmdir im Command-Fenster geht es leider auch nicht.
D:\Programmieren\Arduino\work>rd /S/Q .\libraries
D:\Programmieren\Arduino\work>rmdir /S/Q .\libraries

"Das System kann den angegebenen Pfad nicht finden".

Irgendwie bin ich mal wieder am A*sch
Angehängte Dateien:
#4137836
Lesenswert?

Auja, das ist fein.

rd /S /Q libraries

\libraries\libraries\libraries\libraries\libraries\libraries\libraries\l 
ibraries\libraries\libraries\libraries\libraries\libraries\libraries\lib 
raries\libraries\libraries\libraries\libraries\libraries  - Das 
Verzeichnis ist nicht leer.

Bitte nicht auf die Anzahl der \libraries festnageln.
Gast #4137901
Lesenswert?

/s /q gross/klein ist egal.
es gibt a nur eine "sicherheit" bei verzeichnisstrukturen.
gabs (ich weis nicht ob immer noch) bei linux nicht.
unter linux bin ich mal mit rd und einem "." zuviel ins verzeichns ins 
root gerutscht. es wurde konsequent gemacht! system death! kein bedarf 
es erneut zu testen...

man muss unter win halt wirklich n-mal machen.
Gast #4137940
Lesenswert?

Wie ist denn das rekursive Verzeichnis entstanden ?
Reperaturkonsole öffnen und dann
> chkdsk /f /r /x
> rd /s /q .\pfad
> del /f /s /q .\pfad\*.*
Wenn das nix bringt wie schon gesagt LiveCD und weg damit ...
chkdsk /f /r /x aber unbedingt vorher auf Reperaturkonsole durchführen, 
kann je nach Plattengröße seeeehr lange dauern ...
#4139603
Lesenswert?

Ich würde auf alle Fälle erstmal die Fehlerüberprüfung laufen lassen, 
sonst zerschießt Du Dir noch die Partition D: mit irgendwelchen 
Experimenten.

Als ich im Job neu anfing, waren 1991 nur SUNs am laufen und wenige PCs.
Netzwerk war noch das mit den BNC-Kabeln.
Und irgendein UNIXer fand es wohl witzig, in jedem Verzeichnis einen 
Link auf sich selbst zu setzen.
WINDOWS/DOS hat sich dann totgesucht bis zum Absturz.
Einmal bekam ich eine Fehlermeldung, den Wortlaut weiß ich nicht mehr, 
aber sinngemäß: "Diese Fehlermeldung dürfte eigentlich nie erscheinen."
Vielleicht: "unexpected error message"
#4139677
Lesenswert?

http://superuser.com/questions/620442/how-can-one-delete-recursive-directories-in-windows


Use some Robocopy tricks, quote:
    Create a dummy folder on the drive (D: in this example) where the 
elongated path lives:
    md AnyFolderName
    Copy the dummy folder to the mutant folder using the /MIR (mirror) 
command line switch:
    robocopy D:\AnyFolder D:\BackupFolder /MIR
    Let RoboCopy clean up the fouled folder. This could take a few 
minutes depending on the size of the folder.
    Remove the fixed folder and the dummy folder:
    rd /s D:\BackupFolder rd /s D:\AnyFolder
That’s it. You are good to go.
Moderator #4140459
Lesenswert?

A. K. schrieb:
> Unendliche Pfade in endlicher Zeit abzuarbeiten, das schafft auch der TC
> nicht, das schafft nur Chuck Norris. ;-)

Der Pfad ist ja auch nicht unendlich, sondern nur endlos. Das Problem
ist nur, dass der Explorer anscheinend nicht in der Lage ist, den
Unterschied zu erkennen, weswegen er sofort aufgibt. Das heißt aber
nicht, dass andere Tools diesbezüglich nicht etwas intelligenter sind
(Chkdsk scheint ja mit dem Problem umgehen zu können). Dem TC traue ich
diese Fähigkeit aber nicht zu, denn der ist für andere Dinge gemacht.

Für ext2-, ext3- und ext4-Filesysteme können mit dem Tool debugfs
Directory-Hardlinks (auch zyklische) ganz einfach erzeugt und auch
wieder gelöscht werden, ohne dass dafür das gesamte Filesystem gecheckt
werden muss. Vielleicht gibt es ja ein vergleichbares Tool auch für
NTFS.

Ansonsten würde es auch mich interessieren, wie dieser zyklische
Hardlink (wenn es überhaupt einer ist) zustanden kam. Auf eine ähnliche
Weise kann man ihn vielleicht auch wieder löschen.

Paul Baumann schrieb:
> Der TO meldet sich nicht mehr -er wird sich doch nicht am
> Verzeichnisbaum aufgehangen haben?

Der sucht immer noch das Pfadende und dreht sich dabei im wahrsten Sinne
des Wortes im Kreis :)
#4146187
Lesenswert?

Ein sehr nettes Tool, was bei mir seit Jahren zur Grundausstattung 
gehört ist Link-Shell-Extension.
Das symolsiert im Explorer Hardlinks/Symlinks und Junctions und 
behandelt sie auch vernünftig, wenn sie verschoben/gelöscht oder kopiert 
werden.

Dein Problem kann meiner Meinung nach entweder wirklich ein 
Dateisystemfehler sein, oder eine Junction oder ein Symlink (gibts erst 
seit der NTFS-Version von Vista oder so).
Gast #4146770
Lesenswert?

> Verzeichnis erzeugt worden. libraries\libraries\libraries ..

Wenn es mit Linux erzeugt wurde, sollte man es mit Linux auch wieder 
löschen können.

Mit Windows ist das weniger erfolgreich. Das merkt man schon frühzeitig 
mit dir /s wenn Windows in diesem Ordner meckert, daß es nicht alles von 
der Namenslänge zeigen kann. Das tückische an der Sache ist, daß auch 
ein Backup nicht komplett sein könnte.
#4146799
Lesenswert?

Bei verstuemmelten Verzeichnissen habe ich mit meinem
liebgewordenen Total-Commander auch schon einmal
Schiffbruch erlitten. Alles kann der ebend auch nicht.
Ein: "rm verzeichnis /s" im CDM-Fenster fuehrte auch
nicht zur erfolgreichen Ausfuehrung.
Ein "rmdir verzeichnis /s" brachte aber dann den
gewuenschten Erfolg.
Den Schalter "/q" habe ich nicht benutzt, da muss ich
glatt mal lesen gehen.

Gruss Asko.
Moderator #4146943
Lesenswert?

Konrad S. schrieb:
> A. K. schrieb:
>> Ist mir aber in Unix noch nie begegnet.
>> Hardlinks auf Directories lassen sich heute auch nicht mehr erzeugen.
>
> Linux ist nicht die Welt!
>
> http://docs.oracle.com/cd/E23823_01/html/816-5166/unlink-1m.html
> Man muss aber schon root sein um das machen zu dürfen.

Du beziehst dich auf Solaris 10 8/11 von 2011. In der aktuellen Version
(11.2 von 2014) scheint das nicht mehr zu gehen:

Aus link(1M):
1
Note that the ZFS file system does not support links between directories.

Demnach geht es zumindest für ZFS nicht.

Blättert man im Manual aber etwas weiter, sieht es so aus, dass
Hardlinks auf Verzeichnisse generell unterbunden werden:

Aus link(1M):
1
link and unlink directly invoke the link(2) and unlink(2) system calls

Aus link(2):
1
No process can make a link to a directory, file named by path1 must not
2
be a directory.

Hardlinks auf Verzeichnisse sind also inzwischen wohl auch in Solaris
abgeschafft.
Moderator #4147421
Lesenswert?

Vlad Tepesch schrieb:
>>> Hardlinks auf Verzeichnisse sind also inzwischen wohl auch in Solaris
>>> abgeschafft.
>
> ich find sie wahnsinnig praktisch und bin froh, dass es sowas unter NTFS
> gibt.

Laut dieser Doku sind auch bei NTFS keine Hardlinks auf Verzeichnisse
erlaubt:

  https://msdn.microsoft.com/en-us/library/windows/desktop/aa363860%28v=vs.85%29.aspx
1
This function is only supported on the NTFS file system, and only for
2
files, not directories.

Für Verzeichnisse gibt es Junctions, aber die scheinen eher eine Art
symbolische Links zu sein. Symbolische Links sind ungefährlich und
dürfen auch in Unix/Linux auf Verzeichnisse zeigen und rekursiv sein.
#4147767
Lesenswert?

Konrad S. schrieb:
> Der ".." wird beim Erzeugen des Verzeichnisses angelegt. Insofern ist
> das schon eindeutig.

Wobei ein konsistentes System draus wird, wenn man dann mit unlink() 
jene überzähligen Directory-Links wieder loswerden kann, die man mit 
link() erzeugt hat. Dann kriegt man Schleifen auch wieder weg. Der API 
Dokumentation zufolge könnte das mal so gewesen sein.
#4147993
Lesenswert?

A. K. schrieb:
> Hardlinks auf Directories???? Na Prost!
>
> Softlinks bzw. Reparse Points sind eine andere Baustelle. Hardlinks auf
> Dirs sind jedoch ausser "." und ".." eher Problem als Hilfe.

Yalu X. schrieb:
> Laut dieser Doku sind auch bei NTFS keine Hardlinks auf Verzeichnisse
> erlaubt:

Yalu X. schrieb:
> Für Verzeichnisse gibt es Junctions



Puh - keine Ahnung, wo die Unterschiede zwischen Hardlinks und 
Reparsepoints und Symlinks liegen.

unter NTFS gibts
 - Hardlinks - nur für Dateien
 - Junktions - nur für Verzeichnisse
 - und (seit Vista) Symlinks für beides
 - Pif und Lnk - dateien - entspricht wohl Softlinks

Keine Ahnung wo die unterschiede zwischen den ersten Drei liegen. 
Scheinen ansich das gleiche zu machen :-)
#4148029
Lesenswert?

Vlad Tepesch schrieb:
> Keine Ahnung wo die unterschiede zwischen den ersten Drei liegen.
> Scheinen ansich das gleiche zu machen :-)

Unix-Filesysteme unterscheiden traditionell zwischen Files und 
Directory-Einträgen. Ein File (Inode) ist durch eine eindeutige Nummer 
gekennzeichnet. Directories bestehen aus einer Liste von Filenamen und 
der dazugehörigen Inode-Nummer. Daher können mehrere Directory-Einträge 
auf das gleiche File verweisen (reference counted). Das sind Hardlinks. 
Gibts auch in NTFS, war aufgrund des in NT eingebauten POSIX Subsystems 
nötig. Bei mehrfach verlinkten Files sind alle Links gleichwertig, es 
gibt also kein Original.

Wie benennt man in Unix Dir-Einträge um: Hardlink mit neuem Namen auf 
File setzen und alten Namen löschen. Im ursprünglichen Unix-API 
existierte daher keine Rename-Operation. Und die Löschoperation hiess 
korrekterweise unlink().

Nebeneffekt von Unix-Hardlinks: Es gibt Files, auf die kein Dir-Eintrag 
mehr verweist, noch so lange, bis der letzte Prozess sie geschlossen 
hat. Man kann also Files löschen, die offen sind, weil man damit 
zunächst nur den Dir-Eintrag löscht. Erst wenn sowohl die erwähnte 
Dir-Refcount als auch die Handle-Refcount auf 0 sind wird die Inode 
gelöscht.

Symbolic Links aka Symlinks hingegen kamen in Unix erst später auf und 
sind spezielle Files. Deren Inhalt ist der Pfad, an dem es weiter geht. 
Verschwindet das Ziel dieses Verweises, dann hängt der Symlink in der 
Luft. Im Unterschied zu Hardlinks sind die auch über die Grenzen von 
Filesystemen machbar. Hat auch bei Backups gewisse Vorteile, denn bei 
Hardlinks ist es nicht ganz so einfach, eine Trennung mehrfach 
verlinkter Inodes zu vermeiden.
#4148054
Lesenswert?

PS: Vorteil von Hardlinks: Man kann versionierte Backups herstellen, bei 
denen auf der Backup-Disk der Stand jedes einzelnen Backups vollständig 
als völlig unabhängiger Dateibaum vorhanden ist. Ohne dabei aber 
unveränderte Files repliziert vorzuhalten, weil die einfach auf den 
Vorgänger verlinkt werden. Man kann jeden Baum beliebig ohne 
Nebeneffekte löschen. Mit Symlinks ist das nicht so einfach möglich.

Wird beispielsweise von rsync so durchgeführt, und von ein paar 
Windows-Programmen wie Hardlinkbackup.
Gast #4674987
Lesenswert?

Ich hatte das Problem auch. Das Verzeichnis ist nicht rekursiv, sondern 
einfach nur sehr tief.
Die Lösung besteht darin das libraries Verzeichnis in ein temporäres 
Verzeichnis zu verschieben z.B.: TmpDelete. Das libraries Verzeichnis 
umzubenennen (z.B.: '1'). Dann so weit wie's geht (10-20 mal) in das 
Verzeichnis zu wechseln. Dort das nächste .libraries wieder ins 
temporäres Verzeichnis zu verschieben und '1' zu löschen. Das macht man 
dann so 20-30 Mal und dann ist es leer.

Hier mein Script. Ich hab's im Laufwerk G gemacht:

cd G:\TmpDelete\
ren libraries 1
cd 
G:\TmpDelete\1\libraries\libraries\libraries\libraries\libraries\librari 
es\libraries\libraries\libraries\libraries\libraries\libraries\libraries 
\libraries\libraries\libraries\libraries\libraries\libraries\libraries

move '.\libraries\' G:\TmpDelete\

cd G:\TmpDelete\

rmdir '.\1' -Recurse
Gast #5169814
Lesenswert?

Ich habe das Problem aktuell auch (unter Windows 10). Meine Struktur 
ist:
...\###DigiKam\_GoogleFotos\Eigene Bilder
Beim Versuch, das Dir "Eigene Bilder" zu löschen oder umzunennen oder 
sogar auch nur mit dem cd Befehl ins Directory zu wechseln, dann kommt 
die Meldung: Das System kann den anegebenen Pfad nicht finden.

Hat noch jemand eine Idee? Unlocker kann das Ganze auch nicht lösen.
Gast #5169819
Lesenswert?

Sorry, was meinen Sie mit
Leerzeichen! "Eigene Bilder" schreiben. ???

F:\_MyFiles\z\ccc\Hase\_GoogleFotos\Hasen\###DigiKam\_GoogleFotos\x1\### 
DigiKam\_GoogleFotos\x2\###DigiKam\_GoogleFotos\x3\###DigiKam\_GoogleFot 
os\x4\###DigiKam\_GoogleFotos\x5\###DigiKam\_GoogleFotos\x6\###DigiKam\_ 
GoogleFotos\xxx\###DigiKam\_GoogleFotos>cd  "Eigene Bilder"
Das System kann den angegebenen Pfad nicht finden.
#5170201
Lesenswert?

F:\_MyFiles\z\ccc\Hase\_GoogleFotos\Hasen\###DigiKam\_GoogleFotos\x1\###
DigiKam\_GoogleFotos\x2\###DigiKam\_GoogleFotos\x3\###DigiKam\_GoogleFot
os\x4\###DigiKam\_GoogleFotos\x5\###DigiKam\_GoogleFotos\x6\###DigiKam\_
GoogleFotos\xxx\###DigiKam\_GoogleFotos

ist 255Bytes lang. Scheint wohl knapp zu lang zu sein, um in einem 
Rutsch angesprochen zu werden.

Vielleicht klappt ja noch "cd E*" ;-)
#5170346
Lesenswert?

>Ich würde es erst mal mit so einem NC-Commander Clone versuchen.
>Unter XP hatte es mir mal geholfen.

>Ob es unter W10 geht???

Eigentlich kommt es bei Win nur auf die Arbeitsweise der Tools an.
Wenn die intern ständig mit absoluten Pfaden operieren, sind die schnell 
bei 256Bytes an der Grenze (bzw. irgendwo um 260B mit LW), und Win 
finden den Pfad (vermutlich, weil intern abgeschnitten) dann nicht mehr.

Wenn dagegen mit rel. Pfaden gearbeitet wird, kann man eigentlich fast 
beliebig weit in die Pfade eintauchen (soweit ich weis, ist das nicht 
wirklich fest begrenzt).

Dies ist aber wohl alles noch ein Relikt aus DOS-Zeiten, und wird durch 
interne Parameter-Limits der Win-API verursacht.
NTFS selbst kann weit längere Pfadstrings verdauen, und sollte via 
UNC-Namen auch komplett ansprechbar sein
Persönliche Seite #5170484
Lesenswert?

Jens G. schrieb:
> Wenn die intern ständig mit absoluten Pfaden operieren, sind die schnell
> bei 256Bytes an der Grenze (bzw. irgendwo um 260B mit LW), und Win
> finden den Pfad (vermutlich, weil intern abgeschnitten) dann nicht mehr.

Dann sind die Programmierer einfach nur unfähig - in der Dokumentation 
der Win32-API steht seit über zwei Jahrzehnten, wie man die Pfadlänge 
auf ca. 32k Zeichen erhöhen kann. Das Problem ist also lösbar.
Gast #5170505
Lesenswert?

michael_ schrieb:
> Ich würde es erst mal mit so einem NC-Commander Clone versuchen.

Danke für den Tipp! Habe es mit FreeCommander geschafft, den Pfad zu 
löschen. Gibt mir echt zu denken, dass es im Jahr 2017 nicht möglich 
ist, das mit Windows Bordmitteln machen zu können. Hatte mich gestern 
noch an den Microsoft Support gewandt - das hätte ich mir auch sparen 
können.

@Peter Dannegger (peda): Der Pfad wurde von der Software DigiKam 
erstellt - warum die rekursive Pfade anlegen, ist mir schleierhaft - 
habe diese auch gleich wieder deinstalliert.
#5170561
Lesenswert?

> Dann sind die Programmierer einfach nur unfähig - in der Dokumentation
> der Win32-API steht seit über zwei Jahrzehnten, wie man die Pfadlänge
> auf ca. 32k Zeichen erhöhen kann. Das Problem ist also lösbar.

Dann erkläre das mal den Leuten, die den Windows-Explorer geschrieben 
haben... Dort ist auch bei ca. 256 Zeichen Pfadlänge Schluss (zumindest 
unter XP und W7)
Gast #5172722
Lesenswert?

Rufus Τ. F. schrieb:

> Dann sind die Programmierer einfach nur unfähig - in der Dokumentation
> der Win32-API steht seit über zwei Jahrzehnten, wie man die Pfadlänge
> auf ca. 32k Zeichen erhöhen kann. Das Problem ist also lösbar.

Ja, bloss die blinden Wichser bei Winzigweich selber haben das 
offensichlich bis heute nicht begriffen. Jedenfalls die von der 
Surface-Division... Im Kernel selber ist das absolut kein Problem.

Aber mal ganz davon ab: auch du hast es nicht wirklich begriffen. Das, 
was du meinst, zielt nur darauf ab, längere absolute Pfade handeln zu 
können. Das ist aber auch garnicht nötig, wenn man sich mit relativen 
Pfaden begnügt. Das klappt bis zu (theoretisch beliebiger) Tiefe, 
praktisch natürlich nicht, da man sich ja irgendwo den Pfad merken muss, 
stellt also das Fassungsvermögen des virtuellen Adressraums bzw. des 
darunterliegenden Swapfiles das Limit dar.

However: gegen eine echte Rekursion ist eh' kein Kraut gewachsen, da 
wirken alle stupiden Limitierungen eher positiv: der ganze Scheiß merkt 
dadurch nur schneller, dass er damit nicht klarkommt. Richtig guter 
Code, würde einfach nur sehr viel länger brauchen, um am Ende zum exakt 
gleichen Schluß zu kommen...
Persönliche Seite #5172915
Lesenswert?

c-hater schrieb:
> Aber mal ganz davon ab: auch du hast es nicht wirklich begriffen.

Ach, danke.

Dem Threadstarter ging es wohl in erster Linie darum, einen vergurkten 
Verzeichnsibaum loszuwerden, nicht durch "elegante" rekursive 
Programmierung so etwas anzulegen. Das hat ja für ihn schon irgendein 
Deppenprogramm hinbekommen.

Mir zumindest ist noch kein Fall begegnet, wo tatsächlich vollständige 
Rekursion in Verzeichnisbäumen beliebiger Tiefe irgendeinen Sinn abseits 
der Befriedigung akademischer Hirngespinste darstellt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren