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

Zeitstempel um 12 Stunden vor- bzw. zurückgestellen?

Chris

Member
Hallo Leute,
ich wusste nicht, in welche Kategorie das am besten passt...

Ich habe folgendes Problem: Ich habe bei einer Geburtstagsfeier mit 2 Digital-Kameras Bilder gemacht. Leider hatte eine der Kameras eine um 12 Stunden versetzte Zeit eingestellt. Die beiden Kameras produzierten unterschiedliche Dateinamen.
Wie kann ich die Dateien jetzt nach Erstellungszeit sortieren lassen? Ich möchte eine Diashow daraus basteln, sollte dafür aber die Uhrzeit der einen Bilder korrigieren.
Ich habe mir schon Überlegt: Erst trenne ich die Bilder in 2 Verzeichnisse anhand ihres Namens. Im einen lasse ich den Zeitstempel wie er ist, im anderen muss er um 12 Stunden geändert werden.

Wie kann ich dies bewerkstelligen, dass der Zeitstempel um 12 Stunden vor- bzw. zurückgestellt wird?

Vielen Dank im Voraus
Christian

PS: Es wäre sehr angenehm, wenn ich eine schnelle, unkomlizierte Lösung erfahren könnte. Die CD mit den Bildern sollte bald raus...
 

Hermann

Hacker
Hallo Christian, oder Krename instalieren ist ein KDE-Programm zum umbenennen und hat auch ein Plugin für die Zeit.

Gruß, Hermann
 
OP
C

Chris

Member
Hallo Leute,
Danke schon mal

Leider hilft mir das aber nicht konkret.

Hier noch mal das Problem in Zahlen: Es handelt sich um ca. 350 Bilder! Ich habe die Bilder in 2 Verzeichnisse getrennt. Nun müssen in einem Verzeichnis die Zeitangaben um einen bestimmten Wert (ca. 8 Stunden 23 Minuten) geändert werden. Sie sollen aber nicht auf einen festen Wert eingestellt werden, sondern ihre relativen Abstände beibehalten. Als Ergebnis soll dann eine Sortierung nach der Zeit möglich sein, ohne dass ich per Hand jede Datei editiere.

Ideal wäre natürlich ein Shell-Script, wobei ich auch über jegliche andere Hilfe sehr froh wäre.

Danke noch mal
Christian
 
A

Anonymous

Gast
Habe dir mal ein script geschreiben mit dem du die Zeit nach vorne verstellen kannst um Stunden und Minuten. Welche Dateien du ändern willst, wird im SUCHSTRING eingestellt. Demnächst bitte die Zeiten der Kamera richtig stellen, ist bedeutend einfacher, sonst darft du mal zur Strafe so ein Script analysieren :lol: . Hoffe es funktioniert.
Code:
#!/bin/bash

# Zeitverschiebung Dateien werden um soviel aelter gemacht
DIFF_STUNDE=8
DIFF_MINUTE=23
# Mit SUCHSTRING die Dateien genauer beschreiben zB. test*.???
SUCHSTRING="*"

typeset -i JAHR
typeset -i MONAT
typeset -i TAG
typeset -i STUNDE
typeset -i MINUTE

for i in ` ls -d $SUCHSTRING ` ; do
  HELP=$(ls -dl --time-style=+%Y%m%d%H%M $i | tr -s " " ";" | cut -f6 -d";")
  JAHR=$(echo $HELP | cut -c1-4)
  MONAT=10#$(echo $HELP | cut -c5-6)
  TAG=10#$(echo $HELP | cut -c7-8)
  STUNDE=10#$(echo $HELP | cut -c9-10)
  MINUTE=10#$(echo $HELP | cut -c11-12)

  MINUTE=$MINUTE+$DIFF_MINUTE
  if [ $MINUTE -ge 60 ] ; then
       MINUTE=$MINUTE-60
       STUNDE=$STUNDE+1
  fi
  STUNDE=$STUNDE+$DIFF_STUNDE
  if [ $STUNDE -ge 24 ] ; then
       STUNDE=$STUNDE-24
       TAG=$TAG+1
  fi

  HELP="$JAHR-$MONAT-$TAG $STUNDE:$MINUTE"
 touch -d"$HELP" -m $i

done
Hoffe es sind nicht gerade Sylvesterbilder, Monatswechsel und Jahreswechsel habe ich nicht berücksichtigt. Probiere aber erst mal an irgenwelchen unkritischen Dateien unter /tmp oder so.

robi
 

regexer

Advanced Hacker
Ich würde das ganze in der Scriptsprache perl machen. Perl gehört zur Standardinstallation jeder Linux/Unix-Distribution. Da hat das ganze nur ein paar Zeilen.

Code:
#!/usr/bin/perl

$jetzt = time;
$plus_sekunden=12*60*60; # 12 Stunden 

foreach $datei (</pfad/*.jpg>) {
  ($letzter_zugriff, $letzte_aenderung)=(stat($datei))[8,9];
  utime $jetzt, $letzte_aenderung + $plus_sekunden, $datei;
}
Dieses Script behebt gleich mehrere Probleme:
1. die Ausgabe für "ls" sieht je nach alter der Datei und je nach verwendetem Filesystem anders aus. Ich glaube, standardmäßig wird ab einem halben Jahr die Zeit nicht mehr angezeigt dafür aber das Jahr. Daher sollte man "ls" nicht als Grundlage für solche Operationen verwenden.
2. Das Perl-Script würde auch unter Windows funktionieren, falls man dort Perl installiert hat.
3. So ziemlich alle Dateisysteme speichern die Zeit in Sekunden seit dem 1.Januar 1970 ab. Das Perl-Script arbeitet indern mit genau diesen Zeitangaben. Deswegen braucht man auch keine Jahreswechsel- oder Schaltjahrberechnungen machen.
4. Mit "utime" könnte mach auch das Datum des letzten Zugriffes setzen. In diesem Beispiel ist es auf die aktuelle Zeit gesetzt.
 
Oben