Bei digitalen Aufräumarbeiten habe ich auf meinem NAS eine Verzeichnisstruktur vorgefunden, die nicht nur ein beachtliches Volumen auf dem Speicher belegt hat, sondern sich vor allem auch durch unzählige Unterverzeichnisse und kryptischer Dateien auszeichnete. Die Dateinamen waren offensichtlich aus Hash-Codes gebildet worden und ihr Inhalt rein Binär – das Ergebnis einer früheren Datensicherungslösung.
Das Backup Verzeichnis konnte also weg. Rechte Maustaste, Löschen … dachte ich zumindest!
Es folgte nun der übliche Windows Dialog in dem das Betriebssystem den Status des Löschvorgangs mitteilt. Im ersten Schritt erfasst Windows hier alle Dateien, die gelöscht werden sollen. Alleine dieser Vorgang dauerte einige Minuten, bis schließlich eine sechsstellige Zahl an Dateien erfasst wurde und eine voraussichtliche Dauer des Löschvorgangs mit etwas über einem Tag angegeben wurde.
In der Detailansicht konnte man sehen, dass der Löschvorgang lief, aber schon nach wenigen Minuten reduzierte sich die Verarbeitungsgeschwindigkeit dermaßen, dass die approximative Dauer der Operation auf mehrere Tage erweiterte und letztlich überhaupt kein Fortschritt mehr zu erkennen war.
Ich habe die Operation abgebrochen und versucht einzelne Unterverzeichnisse zu löschen, ja sogar eine kleine Auswahl einzelner Dateien. Ich weiß nicht, ob es die Vielzahl der Dateien oder deren langen Dateinamen die Ursache war, jedoch mit herkömmlichen Mitteln war der Verzeichnisstruktur nicht beizukommen.
Die Lösung musste also auf einer anderen Ebene gefunden werden.
Nun bin ich noch mit Kommandozeilen aufgewachsen und habe keine Angst vor der DOS Shell, die glücklicherweise auch in Windows 10 immer noch verfügbar ist.
Die Lösung meiner Probleme fand sich dann in einem Tool, das ich dafür eigentlich nicht in Betracht gezogen hätte: RoboCopy.
RoboCopy
Wie der Name vermuten lässt, handelt es sich hierbei um ein Programm, das für das automatisierte Abgleichen und Synchronisieren von Dateien und Verzeichnissen vorgesehen ist und einen hierfür äußerst mächtigen Funktionsumfang bietet.
Die Idee ist nun diese: Wenn RoboCopy eine Verzeichnisstruktur mit einer anderen Synchronisieren kann, muss es dabei auch Dateien löschen (können). Synchronisiert man nun ein leeres Verzeichnis (als Original) mit einer bestehenden Verzeichnisstruktur (als Kopie), sollte in der Kopie alles gelöscht werden, was im Original nicht vorhanden ist – also alles.
Die grundlegende Syntax von RoboCopy sieht wie folgt aus:
robocopy <Quelle> <Ziel> [<Filter>] [<Optionen>]
<Quelle> und <Ziel> bezeichnen jeweils Verzeichnisse, die abgeglichen werden sollen.
<Filter> ermöglicht eine Auswahl der Dateien in den Verzeichnissen vorzunehmen. Standardmäßig werden alle Dateien (*.*) synchronisiert, sodass hierzu kein Filter angegeben werden muss.
<Optionen> ermöglichen die Arbeitsweise von RoboCopy genauer zu spezifieren.
In diesem Anwendungsfall kommt die Option /MIR zum Einsatz, die RoboCopy dazu veranlasst eine Spiegelkopie (Mirroring) vorzunehmen. Das bedeutet, dass das Zielverzeichnis am Ende der Operation identisch mit dem Quellverzeichnis ist.
Verzeichnisse löschen mit RoboCopy
Mit diesem Vorwissen ist das Löschen von Verzeichnisstrukturen mit RoboCopy dann recht einfach.
Im ersten Schritt wird ein leeres Verzeichnis benötigt. Dies kann sich an beliebiger Stelle (außerhalb des Zielverzeichnisses) befinden, z. B. C:\leer
Über eine Kommandozeile (Start | cmd) erstellt man dieses leere Verzeichnis mit
md C:\leer
Lautet das zu löschende Zielverzeichnis nun Z:\OldCrazyBackupDir startet man den Löschvorgang mit RoboCopy in der Kommandozeile nun wie folgt:
robocopy C:\leer Z:\OldCrazyBackupDir /MIR
Der Roboter ist damit gestartet und wird eine Weile arbeiten. Ich war zunächst nur bedingt glücklich, weil es aussah, als würde diese Lösung auch nicht wirklich schneller sein, doch dann nahm das Tool Fahrt auf und nach wenigen Minuten wurde das Ergebnis als Statistik angezeigt und das alte Verzeichnis war tatsächlich leer.
Nun mussten nur die beiden leeren Verzeichnisse (C:\leer und Z:\OldCrazyBackupDir) mit Bordmitteln gelöscht werden.
Wie bei allen Löschvorgängen sollte man natürlich Vorsicht walten lassen und besonders den RoboCopy Befehl genau prüfen, bevor man ihn abschickt. Die gelöschten Dateien landen nicht in einem Papierkorb und können somit auch nicht so einfach wiederhergestellt werden.
Prima Beitrag!
Für ganz große Verzeichnisse mit Millionen Dateien empfehle ich zusätzlich die Parameter:
/mir /w:1 /r:1 /mt:16 (auch höher möglich)
Damit werden dann auch nicht löschbare Dateien übersprungen und es werden parallel mehrere Löschungen gleichzeitig durchgeführt. Ist ein bisschen Abhängig von der CPU-Leistung und der Core-Anzahl.