• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Ändern der Dateinamen in einem Rutsch

Spielwurm

Advanced Hacker
Ich musste meine Festplatte mit den Filmen auslagern. Deshalb zeigen in der zugehörigen Datenbank (datacrow) alle Dateinamen ins Leere. Jetzt will ich mit Hilfe von SQL-Befehlen die Dateinamen in einem Rutsch ändern. Was ich bereits habe:

SELECT * FROM movie WHERE (filename LIKE '/home/hartmut/Filme/ReportagenDokus/%') AND (created <'2009-08-05');

damit erhalte ich alle Dateien, die ich bearbeiten will. Mit TRIM könnte ich den Pfad abtrennen. Aber ich muss ja dann den neuen Pfad zum Dateinamen hinzufügen. Leider finde ich dafür kein Beispiel im Netz, hat jemand von Euch eine Lösung dafür?

Hartmut
 

P6CNAT

Advanced Hacker
Hallo,

mit datacrow bin ich nicht vertraut.
Ich würde zwei Möglichkeiten in Erwägung ziehen.
Export der Tabelle in eine Textdatei, bearbeiten der Dateinamen, Import in die Tabelle.

Die zweite, und elegantere Möglichkeit ist aus der Abfrage gleich ein Update Kommando zu generieren,
das ganze in eine Datei umleiten und danach laufen lassen.

Ad hoc so in der Art:
Code:
SELECT 'UPDATE movie set filename = /NeuerPfad/' + TRIM(..., filename) + 'WHERE primaerschluessel = ' + primaerschluessel   
  FROM movie WHERE (filename LIKE '/home/hartmut/Filme/ReportagenDokus/%') AND (created <'2009-08-05');
 
Ich weiß nicht wie die TRIM und die Merge Funktion auf datacrow funktionieren, das
unterscheidet sich bei verschiedenen Datenbanken. Aber das wirst du schon hinkriegen.

Gruß
Georg
 
OP
S

Spielwurm

Advanced Hacker
Danke, ich habe inzwischen eine tippfreundlicher Lösung gefunden:

UPDATE movie SET filename = Replace(filename,'/home/hartmut/Filme/ReportagenDokus','/media/ReporDokus-1')

Nur zur Info: datacrow benutzt die hsql-Datenbank und hat eine SQL-Konsole an Bord, was in diesem Fall wirklich viel Arbeit erspart hat ...

Hartmut
 

P6CNAT

Advanced Hacker
Hi,

schick, die REPLACE Funktion. Ist leider kein Standard und hätte mir eine Menge Kopfzerbrechen ersparen können.

Gruß
Georg
 
Oben