001
10.05.2019, 13:46 Uhr
ao
(Operator)
|
7000 Files, 18000 Ordner, wow, das ist ne Hausnummer.
Im ersten naiven Ansatz würde man für jede der 7000 Quelldateien den Zielbaum durchlaufen, bis man die Zieldatei gleichen Namens gefunden hat, und sie dort ersetzen. Nachteil: Man fängt immer wieder bei Null an zu suchen.
Alternativ könnte man den Zielbaum einmal komplett durchlaufen und alle enthaltenen Dateien indizieren, d.h. in diesem Fall eine Liste anlegen mit allen Dateinamen und dem Pfad, in dem sie liegen. Dann sucht man für die 7000 Quelldateien aus dieser Liste die Pfade heraus und ersetzt die dort stehenden Zieldateien. Nachteil hier: Wenn die 18000 Zielverzeichnisse extrem viele Dateien enthalten (was durchaus sein kann, wenn das ein Fotoarchiv ist), dauert der Aufbau der Liste sehr lange (falls er überhaupt in den Speicher geht), und das Suchen darauf auch, und es wird viel Information zusammengetragen, die später überhaupt nicht gebraucht wird.
Am besten scheint mir zu sein, mit einer Liste der Quelldateien über den Zielbaum zu laufen, in jedem Verzeichnis zu schauen, ob passende Zieldateien enthalten sind, und diese zu ersetzen und gleichzeitig aus der Suchliste zu entfernen. Vorteil: Man iteriert den Baum nur einmal, und die Liste der zu suchenden Dateien wird mit jeder Ersetzung kürzer. Der Algorithmus beschleunigt sich also, je mehr Dateien abgearbeitet sind, und man muss nicht bis zum Ende des Baums laufen, sondern nur, bis die Suchliste leer ist (was früher der Fall sein kann).
Das Ganze funktioniert natürlich nur, wenn die Namen der 7000 Quelldateien im gesamten Zielbaum eindeutig sind, als keine doppelten. Ist das so?
In welcher Sprache macht man das? In irgendeiner, die man gut beherrscht und die leistungsfähige Bibliotheken (Container und Algorithmen) hat. Meine erste Wahl wäre C++, und zwar mindestens C++17 wegen std::filesystem. Ich glaube, wenn man den Container klug wählt und sich bei der Suche von Algorithmen helfen lässt (Container vergleichen und Übereinstimmungen heraussuchen), dann braucht man kaum noch was selber zu programmieren. Dieser Post wurde am 10.05.2019 um 13:49 Uhr von ao editiert. |