Sehe spontan ein paar Ansätze.
Ad 1, "SELECT id,filename FROM images ORDER BY id" und dann jede Datei aus der Liste mit einem Flag versehen.
Das Flag kann ich in der DB setzen, muß dann aber natürlich ordentlich Einträge anlegen für die fehlenden Dateien. Oder ich setz es auf der Datei, soweit ich die Möglichkeit dazu hab (ran darf), dann spar ich mir das.
Läuft in-place mit allen Vor- und Nachteilen, die das hat.
Laufzeit linear mit Anzahl der Einträge in der DB bzw. Anzahl der vorhandenen Dateien.
Ad 2, ich räume den gesamten Haufen Dateien irgendwo aus dem Weg, gehe dann die Liste aller Datenbankeinträge durch und versuche, die zugehörige Datei aus dem Temp-Pfad wieder an seinen angestammten Ort zu restaurieren. Die anderen Dateien bleiben mangels Match automatisch außen vor. Hat aber das Problem, daß der zugehörige Service in der Zwischenzeit nicht funktionieren wird, wenn man nicht für die Zeit den Suchpfad für die Dateidaten entsprechend erweitern kann.
Laufzeit linear mit Anzahl der Datenbankeinträge, "semi-in-place" dahingehend daß zwar kein zusätzlicher Speicherplatz benötigt wird, aber zur Laufzeit der Pfad einer jeden Datei undefiniert ist und daher der Service als DEFUNCT verstanden werden muß.
Prinzipiell geht auch Ad 3, aber das nur der Vollständigkeit halber: man schmeißt die IMAGES-Tabelle weg und generiert sie auf Basis der vorhandenen Dateidaten neu. Kann man auch mit (1) oben verbinden und der DB nur die dort fehlenden Dateiobjekte hinzufügen, wenn man das will.
Hinterher sind keine verwaisten Dateien mehr auf der Festplatte, und wenn man entsprechende Flags setzt, bekommt man denselben Effekt wie in (1) oben. Ist aber aufwendiger und macht nur Sinn, wenn man eine gewisse Synchronisation für sinnvoll hält, zB weil man weder DBEntries \ Dateidaten noch Dateidaten \ DBEntries kennt. Am Ende hat man auf diesem Weg in der Datenbank die Menge aller jemals vorhandenen Dateien mit einem Flag aus DB_FEHLT (Datei da, Eintrag generiert), FS_FEHLT (DB-Eintrag da, aber Datei fehlt) und STATUS_OK (beides vorhanden). Der vierte Zustand (Datei fehlt, DB-Eintrag auch) kann nicht angenommen werden.