Discussion:
Viele Dateien schneller löschen
(zu alt für eine Antwort)
Stephan Kuhagen
2007-01-09 06:44:17 UTC
Permalink
Hallo

Ich habe auf einem WindowsXP-Server ein BuildSystem, das jede Nacht etwa
500.000 Dateien erzeugt, die ich anschließend wieder löschen muß. Wenn ich
das ganze im Explorer versuche (Verzeichnis anklicken, Shift-Entf) kommt
dieser Dialog, dass das Löschen vorbereitet würde, was jedesmal unglaublich
lange dauert. Anschließend beginnt er dann endlich zu löschen, was noch mal
eine zweite Ewigkeit dauert (okay, es ist etwa eine bis eineinhalb
Stunden). Das Dateisystem ist NTFS.

In der Eingabeaufforderung mit del und evtl. zuvor attrib gehts auch nicht
schneller. Die Platte ist defragmentiert und auch ziemlich schnell. Ohne
hier dumme Betriebssystemvergleiche anstellen zu wollen (aber ich komme
eher aus der Unix-Welt): das gleiche passiert auf einem Linux-Rechner mit
exakt identischer Hardware in einem Augenblick wenn ich "rm -rf
VERZEICHNIS" benutze.

Man kann sicher hier darüber streiten, ob das Unix-Kommando mit seiner "Ich
will mir in den Fuß schießen"-Semantik besser oder schlechter als die
Windows-Lösung ist, aber ich hätte gerne eine solche Möglichkeit unter
WindowsXP. Kennt hier jemand so ein Tool? "rm" aus verschiedenen Quellen
habe ich probiert, bringt aber nichts, denn man müßte zuvor mit attrib die
Rechte manipulieren, dass die Dateien überhaupt löschbar werden, was
ebenfalls ewig dauert, bevor es dann losgeht. Ich brauche ein Tool, das man
per BAT-File aufrufen kann, und das weder nachfragt, ob ich sicher bin,
noch irgendwas vorbereitet, sondern gleich und sofort ohne zögern in
jedermans Fuß schießt, wenn er drum bittet, und das so schnell wie
möglich... - Gibts das? Geht das unter WindowsXP?

Danke im Voraus für jede nützliche Auskunft!
Florian Edlhuber
2007-01-09 07:41:51 UTC
Permalink
In de.comp.os.ms-windows.misc Stephan Kuhagen <***@domain.tld> wrote:

Hallo,
Post by Stephan Kuhagen
Ich habe auf einem WindowsXP-Server ein BuildSystem, das jede Nacht etwa
500.000 Dateien erzeugt, die ich anschließend wieder löschen muß. Wenn ich
das ganze im Explorer versuche (Verzeichnis anklicken, Shift-Entf) kommt
dieser Dialog, dass das Löschen vorbereitet würde, was jedesmal unglaublich
lange dauert. Anschließend beginnt er dann endlich zu löschen, was noch mal
eine zweite Ewigkeit dauert (okay, es ist etwa eine bis eineinhalb
Stunden). Das Dateisystem ist NTFS.
Wenn es viele kleine Dateien sind, und Du kein Dateisystem mit
Berechtigungsfunktion benötigst, kannst Du FAT32 nehmen, das ist
schneller.
Post by Stephan Kuhagen
Man kann sicher hier darüber streiten, ob das Unix-Kommando mit seiner "Ich
will mir in den Fuß schießen"-Semantik besser oder schlechter als die
Windows-Lösung ist, aber ich hätte gerne eine solche Möglichkeit unter
WindowsXP. Kennt hier jemand so ein Tool? "rm" aus verschiedenen Quellen
habe ich probiert, bringt aber nichts, denn man müßte zuvor mit attrib die
Rechte manipulieren, dass die Dateien überhaupt löschbar werden, was
ebenfalls ewig dauert, bevor es dann losgeht. Ich brauche ein Tool, das man
per BAT-File aufrufen kann, und das weder nachfragt, ob ich sicher bin,
noch irgendwas vorbereitet, sondern gleich und sofort ohne zögern in
jedermans Fuß schießt, wenn er drum bittet, und das so schnell wie
möglich... - Gibts das? Geht das unter WindowsXP?
Ich schätze mal es gibt Tools von Drittanbietern (deltree gibts ja nicht
mehr unter Windows XP)

Aber wenn Du den Löschvorgang mal garnicht bräuchtest?

Könntest Du die Dateien nicht in eine eigene Partition schreiben, und
diese schnell-formatieren? Sollte das zu lange dauern, kannst Du die
Partition löschen und wieder anlegen ;-)

Oder wenn Du die Dateien eh sofort löscht, nachdem sie erstellt wurden,
--> brauchst Du die Dateien überhaupt? -> also ich meine, lass doch die
Dateien garnicht erste entstehen?

Kannst ja mal schauen. Das fällt mir halt grad so ein ;-)

Ciao,
Flo
--
http://grillforum.net http://www.mybbq.net
das nichtkommerzielle und werbefreie Forum zu Grillen und Barbecue
Stephan Kuhagen
2007-01-09 07:54:52 UTC
Permalink
Hallo
Post by Florian Edlhuber
Wenn es viele kleine Dateien sind, und Du kein Dateisystem mit
Berechtigungsfunktion benötigst, kannst Du FAT32 nehmen, das ist
schneller.
Das ist leider keine Option, NTFS wird aus anderen Gründen benötigt. Ich
hätte jetzt auch naiverweise erwartet, dass NTFS eigentlich das
performantere Dateisystem ist, es ist ja schließlich einige Jahre jünger...
Post by Florian Edlhuber
Könntest Du die Dateien nicht in eine eigene Partition schreiben, und
diese schnell-formatieren? Sollte das zu lange dauern, kannst Du die
Partition löschen und wieder anlegen ;-)
Geht leider ebenfalls nicht, ich habe keine freie Partition zur Verfügung,
obwohl die Idee interessant ist (und ein bißchen strange... ;-).
Post by Florian Edlhuber
Oder wenn Du die Dateien eh sofort löscht, nachdem sie erstellt wurden,
--> brauchst Du die Dateien überhaupt? -> also ich meine, lass doch die
Dateien garnicht erste entstehen?
;-) Na ja, ich lösche sie nicht sofort, ich brauche die Dateien schon, um
daraus Build-Reports sowie diverse Installer zu erstellen. Das ganze sind
im wesentlichen Source-Dateien, die dann compiliert werden und aus den
compilierten Sachen werden dann wiederum verschiedene Installer. Erst dann
brauche ich sie nicht mehr... Außerdem haben wir zusätzlich einen
continuous build, der regelmäßig aktualisiert werden muß. Das ganze
passiert also dauernd. Und allein durch das notwendige Löschen von Dateien
braucht Windows hier bis zu 20 mal so lange wie das gleiche unter Linux
oder MacOSX, was es für die noch mehrheitlich unter Windows arbeitenden
Entwickler hier alles etwas träge macht.
Post by Florian Edlhuber
Kannst ja mal schauen. Das fällt mir halt grad so ein ;-)
Danke für die Tipps erstmal, war aber noch nicht das richtige dabei.

Gruss
Stephan
Martin Draheim
2007-01-09 14:34:52 UTC
Permalink
Post by Stephan Kuhagen
Post by Florian Edlhuber
Könntest Du die Dateien nicht in eine eigene Partition schreiben, und
diese schnell-formatieren? Sollte das zu lange dauern, kannst Du die
Partition löschen und wieder anlegen ;-)
Geht leider ebenfalls nicht, ich habe keine freie Partition zur
Verfügung, obwohl die Idee interessant ist (und ein bißchen
strange... ;-).
Wenn du den Platz für die Dateien hast, aber keine freie Partition,
kannst du auch den freien Platz auf der bestehenden Partition
"abschneiden", und daraus eine neue Partition anlegen, wo die Daten
draufkommen. Geht super leicht mit z.B. Acronis Disc Director.
--
MfG, Martin
Werner P. Schulz
2007-01-09 08:20:38 UTC
Permalink
Post by Stephan Kuhagen
In der Eingabeaufforderung mit del und evtl. zuvor attrib gehts auch nicht
schneller. Die Platte ist defragmentiert und auch ziemlich schnell. Ohne
hier dumme Betriebssystemvergleiche anstellen zu wollen (aber ich komme
eher aus der Unix-Welt): das gleiche passiert auf einem Linux-Rechner mit
exakt identischer Hardware in einem Augenblick wenn ich "rm -rf
VERZEICHNIS" benutze.
... dann lösch doch analog mit rd. Wenn du einzelne Dateien löscht, geht
das doch standardmäßig über den Papierkorb. Nur mal als Anregung - es
gibt sicher bessere Beispiele:
http://www.tutorials.de/forum/microsoft-windows/21604-loeschen-von-dateien-und-verzeichnissen-per-batch.html
--
Gruß Werner - ... der mit den drei Punkten ;-)
mail nur an => wpschulz-***@gmx.de (Adresse nur wenige Tage gültig)
"Linux ohne Konsole ist fast wie Fallschirmspringen ohne Fallschirm!"
der Pinguin für Linux-Fragen => http://www.google.de/linux <=
Stephan Kuhagen
2007-01-09 08:37:57 UTC
Permalink
Hallo
Post by Werner P. Schulz
... dann lösch doch analog mit rd. Wenn du einzelne Dateien löscht, geht
das doch standardmäßig über den Papierkorb. Nur mal als Anregung - es
http://www.tutorials.de/forum/microsoft-windows/21604-loeschen-von-dateien-und-verzeichnissen-per-batch.html

Danke. Das funktioniert zwar zum Löschen, macht es aber nicht schneller.
Dass der Explorer nicht das richtige Tool ist, war mir natürlich klar, aber
auch dort habe ich mit Shift-Del den Papierkorb ja auch schon umgangen. Nur
die Variante in der Eingabeaufforderung ist bisher auch nicht schneller,
nur weniger bunt... :-(

Gruß
Stephan
Ralf Breuer
2007-01-09 08:21:35 UTC
Permalink
Stephan Kuhagen <***@domain.tld> schrieb:

Hallo Stephan,
Post by Stephan Kuhagen
Ich habe auf einem WindowsXP-Server ein BuildSystem, das jede Nacht
etwa 500.000 Dateien erzeugt, die ich anschließend wieder löschen
muß. Wenn ich das ganze im Explorer versuche (Verzeichnis anklicken,
Shift-Entf) kommt dieser Dialog, dass das Löschen vorbereitet würde,
was jedesmal unglaublich lange dauert. Anschließend beginnt er dann
endlich zu löschen, was noch mal eine zweite Ewigkeit dauert (okay,
es ist etwa eine bis eineinhalb Stunden). Das Dateisystem ist NTFS.
Das ist ein Explorer-Problem.
Post by Stephan Kuhagen
In der Eingabeaufforderung mit del und evtl. zuvor attrib gehts auch
nicht schneller.
del /f /s Verzeichnis
del /? zeigt alle Optionen.
Post by Stephan Kuhagen
Ohne hier dumme Betriebssystemvergleiche anstellen zu wollen
(aber ich komme eher aus der Unix-Welt): das gleiche passiert auf
einem Linux-Rechner mit exakt identischer Hardware in einem
Augenblick wenn ich "rm -rf VERZEICHNIS" benutze.
Ich kann Dich gut verstehen :-)
--
Gruß
Ralf
Ich mag kein TOFU. Siehe http://einklich.net/usenet/zitier.htm
Bei Direkt-Mails NOSPAM entfernen
Olaf Schinkel
2007-01-09 10:05:18 UTC
Permalink
Hallo!
Post by Stephan Kuhagen
Hallo
Ich habe auf einem WindowsXP-Server ein BuildSystem, das jede Nacht etwa
500.000 Dateien erzeugt, die ich anschließend wieder löschen muß. Wenn ich
das ganze im Explorer versuche (Verzeichnis anklicken, Shift-Entf) kommt
dieser Dialog, dass das Löschen vorbereitet würde, was jedesmal unglaublich
lange dauert. Anschließend beginnt er dann endlich zu löschen, was noch mal
eine zweite Ewigkeit dauert (okay, es ist etwa eine bis eineinhalb
Stunden). Das Dateisystem ist NTFS.
Kannst du diese temp. Daten nicht auf eine extra Partition oder Platte
legen, welche dann mit "Format" schnell gebügelt wird?
Wie ist die Menge der Daten? Reicht eine RAMdisk?
Oder ein Flash-Speicher?

Olaf
Stephan Kuhagen
2007-01-09 11:10:29 UTC
Permalink
Post by Olaf Schinkel
Kannst du diese temp. Daten nicht auf eine extra Partition oder Platte
legen, welche dann mit "Format" schnell geb�gelt wird?
Das ist nicht so einfach. Das ganze ist ein 1HE-Server in einem Rack mit
Wartungsvertrag, da kann man nicht mal schnell eine neue Platte mit
reinhängen...
Post by Olaf Schinkel
Wie ist die Menge der Daten? Reicht eine RAMdisk?
Oder ein Flash-Speicher?
Der Rechner hat nur 2GB RAM, an Daten sind es aber so um die 20 GB... No
way...

Danke dennoch.
Stephan
Klaus Urban
2007-01-09 12:27:41 UTC
Permalink
Hallo Stephan,

Kopiere Deltree von einer Windows 95/98 Installation nach
C:\Windows\system32.
Lasse alle Dateien in einen Ordner erstellen, den du dann mit
Deltree D:\Temp-Ordner /y löscht.

Klaus
Michael Kohaupt
2007-01-09 12:57:38 UTC
Permalink
Post by Klaus Urban
Kopiere Deltree von einer Windows 95/98 Installation nach
C:\Windows\system32.
Lasse alle Dateien in einen Ordner erstellen, den du dann mit
Deltree D:\Temp-Ordner /y löscht.
Klingt für mich vernünftig.
Und das ganze in eine batch

Den Schalter /y kenne ich aber nicht? tree löschen, aber den obersten
Ordner stehen lassen ?

Gruss
Michael
Stephan Kuhagen
2007-01-09 13:33:21 UTC
Permalink
Post by Michael Kohaupt
Post by Klaus Urban
Kopiere Deltree von einer Windows 95/98 Installation nach
C:\Windows\system32.
Lasse alle Dateien in einen Ordner erstellen, den du dann mit
Deltree D:\Temp-Ordner /y löscht.
Klingt für mich vernünftig.
Und das ganze in eine batch
Den Schalter /y kenne ich aber nicht? tree löschen, aber den obersten
Ordner stehen lassen ?
Alles in einem Ordner habe ich schon, per batch-script ohnehin, das ginge
also. Aber ist deltree denn wirklich erfahrungsgemäß so viel schneller
als "rd"?

Ich werd mal sehen, ob ich noch irgendwo ein deltree auftreiben kann. Danke
jedenfalls für den Hinweis.

Gruss
Stephan
Michael Kohaupt
2007-01-09 13:57:29 UTC
Permalink
Post by Stephan Kuhagen
Aber ist deltree denn wirklich erfahrungsgemäß so viel schneller
als "rd"?
Verglichen habe ich das noch nie.
Ich muss jetzt 15 Jahre zurückdenken und wenn ich mich recht erinnere,
setzt deltree in der file alocation tabel lediglich ein einziges Löschbit.
Was rd macht ... weiss ich nicht.

Gruss
Michael
Michael Futtermenger
2007-01-09 13:52:24 UTC
Permalink
Post by Michael Kohaupt
Den Schalter /y kenne ich aber nicht?
Alle Nachfragen mit y (positiv) beantworten.

Michael
--
Die Intelligenz auf der Erde ist eine Konstante.
Nur die Anzahl der Bewohner ist variabel.
Stephan Kuhagen
2007-01-09 14:46:04 UTC
Permalink
Hallo Klaus
Post by Klaus Urban
Kopiere Deltree von einer Windows 95/98 Installation nach
C:\Windows\system32.
Lasse alle Dateien in einen Ordner erstellen, den du dann mit
Deltree D:\Temp-Ordner /y löscht.
Danke, das ist ja echt Voodoo! Habe gerade mit deltree gelöscht, und
innerhalb von 8 Minuten war der Verzeichnisbaum von der Platte geputzt.
Jetzt muß ich noch mal beobachten, ob das nicht nur eine Ausnahme war,
wegen irgendwelchen anderen quantenmechanischen Einmaligkeiten, aber
erstmal siehts gut aus.

Besten Dank!
Stephan
Klaus Urban
2007-01-09 15:07:02 UTC
Permalink
Hallo Stephan,

Stephan Kuhagen schrieb:
[..]
Post by Stephan Kuhagen
Post by Klaus Urban
Lasse alle Dateien in einen Ordner erstellen, den du dann mit
Deltree D:\Temp-Ordner /y löscht.
Danke, das ist ja echt Voodoo!
ja, früher wurde einfach gelöscht ;-)
Post by Stephan Kuhagen
Habe gerade mit deltree gelöscht, und
innerhalb von 8 Minuten war der Verzeichnisbaum von der Platte geputzt.
Jetzt muß ich noch mal beobachten, ob das nicht nur eine Ausnahme war,
wegen irgendwelchen anderen quantenmechanischen Einmaligkeiten, aber
erstmal siehts gut aus.
das wird immer so schnell sein.
Natürlich muß der Ordner danach wieder angelegt werden.

Klaus
Werner P. Schulz
2007-01-09 15:24:56 UTC
Permalink
Post by Stephan Kuhagen
Danke, das ist ja echt Voodoo! Habe gerade mit deltree gelöscht, und
innerhalb von 8 Minuten war der Verzeichnisbaum von der Platte geputzt.
... und welche Zeit brauchst du mit
rd /s /q Laufwerk:Pfad
oder hast du das gar nicht getestet?

Im übrigen ist es keine gute Idee, nicht die zum Betriebssystem speziell
gehörigen Konsolenbefehle zu verwenden.
--
Gruß Werner - ... der mit den drei Punkten ;-)
mail nur an => wpschulz-***@gmx.de (Adresse nur wenige Tage gültig)
"Linux ohne Konsole ist fast wie Fallschirmspringen ohne Fallschirm!"
der Pinguin für Linux-Fragen => http://www.google.de/linux <=
Stefan M. Huber
2007-01-09 15:46:00 UTC
Permalink
On Tue, 09 Jan 2007 16:24:56 +0100, Werner P. Schulz
Post by Werner P. Schulz
Post by Stephan Kuhagen
Danke, das ist ja echt Voodoo! Habe gerade mit deltree gelöscht, und
innerhalb von 8 Minuten war der Verzeichnisbaum von der Platte geputzt.
... und welche Zeit brauchst du mit
rd /s /q Laufwerk:Pfad
oder hast du das gar nicht getestet?
Im übrigen ist es keine gute Idee, nicht die zum Betriebssystem speziell
gehörigen Konsolenbefehle zu verwenden.
Warum? Wenn ein Programm eine gewisse API-Funktion verwendet, greift es
sowieso wieder nur auf die Methoden des Betriebssystemes zu. Wenn ein
Tool/eine Library roh auf die Platte zugreift und die Struktur selber
ändert, stimme ich dir zu.

Und ich denke, darauf wolltest du hinaus.

Übrigens: Ohne dd möchte ich auch unter Windows nicht mehr leben müssen,
sonst hätte ich ewig gebraucht, um meine Partitionen zu virtualisieren :)

Stefan
Werner P. Schulz
2007-01-09 18:08:23 UTC
Permalink
Post by Stefan M. Huber
Post by Werner P. Schulz
Im übrigen ist es keine gute Idee, nicht die zum Betriebssystem speziell
gehörigen Konsolenbefehle zu verwenden.
Warum? Wenn ein Programm eine gewisse API-Funktion verwendet, greift es
sowieso wieder nur auf die Methoden des Betriebssystemes zu.
... da müßte ein Spezialist Auskunft geben. Meine Bedenken waren, das
man unter NTFS auch das dafür vorgesehene tool nehmen sollte und nicht
eins aus der DOS-Zeit. Ich gehe mal davon aus, daß deltree nicht ohne
Grund für NTFS-OS nicht mehr angeboten wird.
--
Gruß Werner - ... der mit den drei Punkten ;-)
mail nur an => wpschulz-***@gmx.de (Adresse nur wenige Tage gültig)
"Linux ohne Konsole ist fast wie Fallschirmspringen ohne Fallschirm!"
der Pinguin für Linux-Fragen => http://www.google.de/linux <=
Roman Schütz
2007-01-09 19:37:20 UTC
Permalink
Post by Werner P. Schulz
Post by Stefan M. Huber
Post by Werner P. Schulz
Im übrigen ist es keine gute Idee, nicht die zum Betriebssystem speziell
gehörigen Konsolenbefehle zu verwenden.
Warum? Wenn ein Programm eine gewisse API-Funktion verwendet, greift es
sowieso wieder nur auf die Methoden des Betriebssystemes zu.
... da müßte ein Spezialist Auskunft geben. Meine Bedenken waren, das
man unter NTFS auch das dafür vorgesehene tool nehmen sollte und nicht
eins aus der DOS-Zeit. Ich gehe mal davon aus, daß deltree nicht ohne
Grund für NTFS-OS nicht mehr angeboten wird.
Deltree gibts unter NTFS-OS nicht, weils da schon von Anfang an rd /s
gab.
Weshalb also eine Funktionalität hinzufügen, die es schon gibt?
rd /s gabs unter DOS ja nicht, deshalb hat man es dann später in Form
von deltree hinzugefügt.

Grüsse
Roman
Stephan Kuhagen
2007-01-10 06:58:28 UTC
Permalink
Post by Roman Schütz
Deltree gibts unter NTFS-OS nicht, weils da schon von Anfang an rd /s
gab.
Weshalb also eine Funktionalität hinzufügen, die es schon gibt?
Wegen der Performance, wie ich gerade in diesem Thread lerne... ;-)

Stephan
Stefan M. Huber
2007-01-10 16:38:58 UTC
Permalink
Post by Roman Schütz
Post by Werner P. Schulz
Post by Stefan M. Huber
Post by Werner P. Schulz
Im übrigen ist es keine gute Idee, nicht die zum Betriebssystem
speziell
Post by Stefan M. Huber
Post by Werner P. Schulz
gehörigen Konsolenbefehle zu verwenden.
Warum? Wenn ein Programm eine gewisse API-Funktion verwendet, greift
es
Post by Stefan M. Huber
sowieso wieder nur auf die Methoden des Betriebssystemes zu.
... da müßte ein Spezialist Auskunft geben. Meine Bedenken waren, das
man unter NTFS auch das dafür vorgesehene tool nehmen sollte und nicht
eins aus der DOS-Zeit. Ich gehe mal davon aus, daß deltree nicht ohne
Grund für NTFS-OS nicht mehr angeboten wird.
Deltree gibts unter NTFS-OS nicht, weils da schon von Anfang an rd /s
gab.
Weshalb also eine Funktionalität hinzufügen, die es schon gibt?
rd /s gabs unter DOS ja nicht, deshalb hat man es dann später in Form
von deltree hinzugefügt.
Aber das Einführen eines anderen Kommandos, das nicht äquivalent ist, ist
kein Ersatz. Oder kann ich mit rd ein Verzeichnis löschen, ohne das
Verzeichnis zu löschen? Also das, was mit deltree so ging:
deltree C:\temp\*.*

Mit rd, ist die Syntax falsch, weil ein c:\temp\ erwartet wird. Wenn ich
das mache, das Verzeichnis aber zB wieder haben will, mit speziell
gesetzten Rechten, muss ich hintennach die Rechte wieder setzen.

Also nein, deltree und rd sind nicht äquivalent.

Stefan
Stefan Kanthak
2007-01-10 21:54:35 UTC
Permalink
Post by Stefan M. Huber
Post by Roman Schütz
Deltree gibts unter NTFS-OS nicht, weils da schon von Anfang an rd /s
gab.
Weshalb also eine Funktionalität hinzufügen, die es schon gibt?
rd /s gabs unter DOS ja nicht, deshalb hat man es dann später in Form
von deltree hinzugefügt.
Aber das Einführen eines anderen Kommandos, das nicht äquivalent ist, ist
kein Ersatz. Oder kann ich mit rd ein Verzeichnis löschen, ohne das
deltree C:\temp\*.*
Mit rd, ist die Syntax falsch, weil ein c:\temp\ erwartet wird. Wenn ich
das mache, das Verzeichnis aber zB wieder haben will, mit speziell
gesetzten Rechten, muss ich hintennach die Rechte wieder setzen.
Also nein, deltree und rd sind nicht äquivalent.
Wie waers mit etwas Phantasie?

chdir "%directory%" && rmdir /s /q .

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)
Stephan Kuhagen
2007-01-11 05:13:10 UTC
Permalink
Post by Stefan Kanthak
Wie waers mit etwas Phantasie?
chdir "%directory%" && rmdir /s /q .
WAS? ...check, ckeck... Puh, jetzt war ich gerade echt schockiert! Man
sollte ja wohl nicht das aktuelle Arbeitsverzeichnis löschen können!

----
C:\devel\tst>mkdir tst
C:\devel\tst>chdir tst
C:\devel\tst\tst>rmdir /s /q .
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen
Prozess verwendet wird.
----

Beruhigt...
Stephan
Stefan M. Huber
2007-01-12 09:56:58 UTC
Permalink
On Wed, 10 Jan 2007 22:54:35 +0100, Stefan Kanthak
Post by Stefan Kanthak
Post by Stefan M. Huber
Also nein, deltree und rd sind nicht äquivalent.
Wie waers mit etwas Phantasie?
chdir "%directory%" && rmdir /s /q .
Ekelhaft, erzeugt aber das gewünschte. Danke für die Anregung.

Stefan

Stephan Kuhagen
2007-01-10 06:57:26 UTC
Permalink
Post by Werner P. Schulz
... und welche Zeit brauchst du mit
rd /s /q Laufwerk:Pfad
oder hast du das gar nicht getestet?
Doch, aber die Zeiten sind leider wegen der dauernden Auslastung des
Rechners nicht so richtig deterministisch. Bei den realen großen
Anwendungsbeispielen verhindert die ewige Laufzeit das richtige Testen im
Moment, aber rd war bisher auch dort extrem langsam.

Ein paar kleine Testläufe, die ich gerade gemacht habe (5 MB Daten mit nur
drei Verzeichnis-Ebenen) bringen keinen Vorteil von deltree gegenüber rd.
Aber gestern beim Löschen eines realen Verzeichnisses mit deltree in 8-9
Minuten gegenüber den Stunden, die ich bisher kannte, war ich echt
erschrocken. Ich nehme an, dass die Mechanismen, die beide benutzen,
letztendlich die gleichen sind, aber vielleicht hat deltree einen
geschickteren Algorithmus für die Rekursion durch Bäume. Gerade bei
Rekursion können geringe Ungeschicklichkeiten in der Programmierung ja
enorme Laufzeitunterschiede bei ausreichend großen Datenmengen ergeben,
während die Unterschiede bei kleinen Datenmengen kaum messbar sind. Ich
nehme an, das Phänomen beobachte ich hier gerade.
Post by Werner P. Schulz
Im übrigen ist es keine gute Idee, nicht die zum Betriebssystem speziell
gehörigen Konsolenbefehle zu verwenden.
Um das zu glauben, müßte ich eine gute Begründung genannt bekommen. Demnach
wäre es z.B. eine sehr schlechte Idee, GNU-Tools für Dateioperationen zu
verwenden, aber ohne awk, sed, grep und dergleichen ist Leben auf fremden
Planeten unmöglich... ;-)

Stephan
Olaf Schinkel
2007-01-09 14:26:05 UTC
Permalink
Hallo!
Post by Stephan Kuhagen
Post by Olaf Schinkel
Kannst du diese temp. Daten nicht auf eine extra Partition oder Platte
legen, welche dann mit "Format" schnell gebgelt wird?
Das ist nicht so einfach. Das ganze ist ein 1HE-Server in einem Rack mit
Wartungsvertrag, da kann man nicht mal schnell eine neue Platte mit
reinhängen...
Nein, das wird schwierig.
Server wechseln :-)
Post by Stephan Kuhagen
Post by Olaf Schinkel
Wie ist die Menge der Daten? Reicht eine RAMdisk?
Oder ein Flash-Speicher?
Der Rechner hat nur 2GB RAM, an Daten sind es aber so um die 20 GB... No
way...
OK

Aber du weisst doch bestimmt, WANN dein Kompilieren, etc fertig ist, oder?
Dann kannst du doch das Löschen dnach gleich anstossen.
Oder eben per Zeitbatch.
Wie die anderen schon schrieben, mit deltree oder ähnlichem.

Olaf
Stephan Kuhagen
2007-01-09 14:34:57 UTC
Permalink
Hallo
Post by Olaf Schinkel
Aber du weisst doch bestimmt, WANN dein Kompilieren, etc fertig ist, oder?
Dann kannst du doch das L�schen dnach gleich anstossen.
Oder eben per Zeitbatch.
Wie die anderen schon schrieben, mit deltree oder �hnlichem.
Das Löschen geschieht in der Tat normalerweise im Hintergrund und
per "Geplantem Task". Das verschwendet zwar immer noch unglaublich viel
Zeit, kann man aber irgendwie mit leben. Schwierig wird es, wenn mal außer
der Reihe schnell was angestoßen werden soll und man jetzt gleich das
Problem erledigt haben will.

Letztendlich lassen sich für den Regelbetrieb solche Umwege machen. Aber was
ich brauche, ist die schnelle Lösung für die "mal eben"-Sachen. Leider
passiert es recht oft, dass man mal eben so einen Haufen Kram wegwerfen
muß.

Scheinbar ist die eine Idee, das ganze auf einer zweiten Partition zu machen
und dann ein QuickFormat zu benutzen tatsächlich die beste Variante. Aber
irgendwie klingt das... komisch.

Gruss
Stephan
Frank Hartwig
2007-01-09 14:23:47 UTC
Permalink
Post by Stephan Kuhagen
Hallo
Ich habe auf einem WindowsXP-Server ein BuildSystem, das jede Nacht etwa
500.000 Dateien erzeugt, die ich anschließend wieder löschen muß. Wenn ich
das ganze im Explorer versuche (Verzeichnis anklicken, Shift-Entf) kommt
dieser Dialog, dass das Löschen vorbereitet würde, was jedesmal unglaublich
lange dauert. Anschließend beginnt er dann endlich zu löschen, was noch mal
eine zweite Ewigkeit dauert (okay, es ist etwa eine bis eineinhalb
Stunden). Das Dateisystem ist NTFS.
Das Problem ist mir durchaus geläufig, ist beim Kopieren ja
ähnlich. Mit dem Programm kop ist zumindest das Kopieren deutlich
schneller, vermutlich auch das Löschen. Wie das mit
unterschiedlichen Rechten aussieht, kann ich nicht beurteilen.

Schau es Dir selbst mal an:

http://members.inode.at/m.hintenaus/


Gruß Frank
Joachim Mohr
2007-01-09 16:16:18 UTC
Permalink
Post by Stephan Kuhagen
Hallo
Ich habe auf einem WindowsXP-Server ein BuildSystem, das jede Nacht etwa
500.000 Dateien erzeugt, die ich anschließend wieder löschen muß. Wenn ich
das ganze im Explorer versuche (Verzeichnis anklicken, Shift-Entf) kommt
dieser Dialog, dass das Löschen vorbereitet würde, was jedesmal unglaublich
lange dauert. Anschließend beginnt er dann endlich zu löschen, was noch mal
eine zweite Ewigkeit dauert (okay, es ist etwa eine bis eineinhalb
Stunden). Das Dateisystem ist NTFS.
In der Eingabeaufforderung mit del und evtl. zuvor attrib gehts auch nicht
schneller. Die Platte ist defragmentiert und auch ziemlich schnell. Ohne
hier dumme Betriebssystemvergleiche anstellen zu wollen (aber ich komme
eher aus der Unix-Welt): das gleiche passiert auf einem Linux-Rechner mit
exakt identischer Hardware in einem Augenblick wenn ich "rm -rf
VERZEICHNIS" benutze.
Man kann sicher hier darüber streiten, ob das Unix-Kommando mit seiner "Ich
will mir in den Fuß schießen"-Semantik besser oder schlechter als die
Windows-Lösung ist, aber ich hätte gerne eine solche Möglichkeit unter
WindowsXP. Kennt hier jemand so ein Tool? "rm" aus verschiedenen Quellen
habe ich probiert, bringt aber nichts, denn man müßte zuvor mit attrib die
Rechte manipulieren, dass die Dateien überhaupt löschbar werden, was
ebenfalls ewig dauert, bevor es dann losgeht. Ich brauche ein Tool, das man
per BAT-File aufrufen kann, und das weder nachfragt, ob ich sicher bin,
noch irgendwas vorbereitet, sondern gleich und sofort ohne zögern in
jedermans Fuß schießt, wenn er drum bittet, und das so schnell wie
möglich... - Gibts das? Geht das unter WindowsXP?
Ich habe eben in Delphi ein kleines Programm geschrieben,
das alle Dateien in einem Ordner löscht.
Würde mich interessieren, ob das schneller als das
Windowseigene die fDateien löscht (auf jeden Fall, legt es sofort los
mit löschen).

http://www.ebg.tue.bw.schule.de/projekte/informatik/zip/ttverzeichnisloeschen.exe

Oder auf www.joachimmohr.de "Downloadseite"

Natürlich ohne Garantie. Abe siehe selbst: Den Quelltext hänge ich an.

MFG Joachim

------------- Quelltext ----------------------
unit Unit1;
//(c) Joachim Mohr www.joachimmohr.de

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Memo1: TMemo;
Button4: TButton;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
HalteDurchsuchenan: boolean;

implementation
uses FileCtrl;
{$R *.DFM}

function IniPfad:string;
var exepfad, exefile: string;
begin
exepfad := extractFilepath(paramstr(0));
exefile := extractFilename(paramstr(0));
result:=exepfad //der exe-pfad des Programms
+ copy(exefile,1,length(exefile) - 3) //der Name ohne "exe"
+ 'ini'; //die Ini-Datei
end;

function DateiNameOhneExe:string;
var exefile: string;
begin
exefile := extractFilename(paramstr(0));
result:= copy(exefile,1,length(exefile) - 3); //der Name ohne "exe"
end;

procedure LoescheDieDateienDes(Verzeichnis : String);
Var SR : TSearchRec;
geloescht, nichtgeloescht: integer;
begin
geloescht := 0;
nichtgeloescht := 0;
if Verzeichnis[length(Verzeichnis)]<>'\' then
Verzeichnis:=Verzeichnis+'\';
if FindFirst(Verzeichnis+'*.*',$3F,SR)=0 then begin
try //wg "exit" ind zu jem finfirst ein findclose
HalteDurchsuchenan := false; //siehe unten
repeat
if (SR.Name<>'.') and (SR.Name<>'..') then BEgin
if pos(lowercase(DateiNameOhneExe),lowercase(sr.name)) <> 1
then BEGin
//Das Programm selbst und seine .ini-Datei löscht sich nicht
if deleteFile(Verzeichnis + sr.name) then inc(geloescht)
else inc(nichtgeloescht);
END;
ENd;
form1.label4.caption := 'Gelöscht:' + inttostr(geloescht);
if nichtgeloescht > 0 then form1.label4.caption :=
form1.label4.caption+ ' Nicht gelöscht: ' +
inttostr(nichtgeloescht);
Application.processmessages;
if HalteDurchsuchenan then exit; //Wird durch einen Buttonclick
true;
until FindNext(SR)<>0;
finally FindClose(SR) End;
End;
end;

procedure TForm1.Button1Click(Sender: TObject);
var verz: string;
begin
verz := trim(memo1.text);
if length(verz) < 4 then Begin
showmessage('Verzeichnis falsch oder Wurzelverzeichnis'#13+
'Falls Wurzelverzeichnis: Formatieren!');
exit;
End;
button1.Hide;
button4.Show;
LoescheDieDateienDes(verz);
button1.show;
button4.hide;
end;

procedure TForm1.Button3Click(Sender: TObject);
var dir: string; //FileCtrl
begin
try
if SelectDirectory('Laufwerk auswählen.'#13 +
'Dann:"OK" anklicken.','', dir)
then Begin
memo1.text := dir;
memo1.Lines.SaveToFile(inipfad);
End;
except showmessage('Auf das Verzeichnis kann zur Zeit nicht
zugegriffen werden!'); End;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
try
memo1.Lines.LoadFromFile(inipfad);
except memo1.Text := '' End;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
button4.Hide;
button1.show;
HalteDurchsuchenan := true;
end;

end.
--
Joachim Mohr, Tübingen
www.joachimmohr.de
Lektionen zu Delphi Vektoren und Musiktheorie
Stephan Kuhagen
2007-01-10 07:05:26 UTC
Permalink
Post by Joachim Mohr
Ich habe eben in Delphi ein kleines Programm geschrieben,
das alle Dateien in einem Ordner löscht.
Würde mich interessieren, ob das schneller als das
Windowseigene die fDateien löscht (auf jeden Fall, legt es sofort los
mit löschen).
http://www.ebg.tue.bw.schule.de/projekte/informatik/zip/ttverzeichnisloeschen.exe

Ehrlich gesagt möchte ich auf einem Server im Produktiveinsatz ungerne
ein "mal eben schnell"-Programm aus mir unbekannter Quelle testen. Bitte
nicht als persönlichen Angriff verstehen, aber dazu müßte ich das Programm
sicherheitshalber erstmal verstehen (und ich kann kein Delphi...) und
selber compilieren.

Aber vielleicht testest Du es einfach selber und vergleichst mit "rd". Dabei
ist zu beachten, dass in meiner Anwendung jedes Verzeichnis selber
mindestens ein weiteres Verzeichnis namens .svn enthält, dessen Inhalt
schreibgeschützt ist, ebenso wie das jeweilige .svn-Verzeichnis selber. Es
kommt zum reinen Löschen also möglicherweise zuvor die Zeit hinzu, die zum
Ändern der Zugriffsrechte benötigt wird. Wenn Du so einen Vergleich machst,
würde mich das Ergebnis durchaus interessieren. Notfalls könnte ich dann
selber ein kleines Progrämmchen hacken, das sowas schneller erledigt als
Explorer, rd und Co.

Gruss
Stephan
Loading...