Hallo!
In einem Ordner habe ich hunderte Fotos mit dem gleichen Namensschema: YYYYMMDD_HHMMSS.jpg
Durch verschiedene Dateioperationen (Kopieren, Verschieben, Bearbeiten) stimmt das Dateidatum nicht mit diesem Namensschema überein. Dadurch gibt es z.B. die Datei "20180401_154342.jpg" mit Dateidatum "05.02.22 14:39", dem Datum der letzten Dateioperation. Ich möchte als Dateidatum analog zum Dateinamen "01.04.18 15:43:42".
Dazu lasse ich sed den Dateinamen schon in den benötigten Gruppen auslesen: YYYYMMDD_HHMMSS.jpg → [YY][YYMMDD]_[HHMM][SS].jpg
Das ist auf den ersten Blick verwirrend, weil das Dateidatum ja folgendermaßen dargestellt wird [DD].[MM].[YY] [HH]:[MM], aber zum Ändern mit touch eine andere Eingabe verlangt wird, eben in folgender Form: [YYMMDD][HHMM].[SS]
Soweit die Theorie, für eine einzelne Datei konnte ich das auch schon erfolgreich testen(leider mit beschränkten Scriptingfähigkeiten).
In einer testdatei habe ich folgenden Dateinamen notiert: 20180401_154342.jpg, lese ihn aus und speichere ihn in einer Variable
1 2 3 4 | dateiname=$(cat testdatei) # Kontrolle echo $dateiname 20180401_154342.jpg |
Wie oben beschrieben werden Gruppen ausgelesen und neu zusammengesetzt
1 2 3 4 | dateidatum=$(sed 's/\(^[0-9]\{2\}\)\([0-9]\{6\}\)_\([0-9]\{4\}\)\([0-9]\{2\}\).jpg/\2\3\.\4/g' < testdatei ) # Kontrolle echo $dateidatum 1804011543.42 |
Damit wird das Dateidatum wie gewünscht analog zum Dateinamen geändert.
1 | touch -t $dateidatum $dateiname |
Aber wie am Anfang erwähnt, habe ich nicht nur eine Handvoll Dateien, sondern hunderte. Meine Programmierfähigkeiten reichen noch soweit um zu wissen daß diese Anforderung einen Loop braucht. Muß ich mit find eine Liste generieren die dann in einem Rutsch abgearbeitet wird? Kann ich im Loop für jede einzelne Datei sofort die Umbenennung anstoßen?
Da bin ich auf Input von außen angewiesen, ich bedanke mich schon mal bei jedem der sich mit meiner Anforderung beschäftigen mag.
Dietmar