Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

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

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Chris
Member
Member
Beiträge: 117
Registriert: 3. Jan 2004, 18:28
Kontaktdaten:

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

Beitrag von Chris »

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...
admine
Administrator
Administrator
Beiträge: 8865
Registriert: 15. Feb 2004, 21:13
Kontaktdaten:

Beitrag von admine »

Moin,

Zeitstempel ändern - dabei hilft dir:

Code: Alles auswählen

man touch
zum sortieren:

Code: Alles auswählen

man sort
..:: unser Linux-Club-Wiki ::..
-------------------------
..:: Deutsche Mugge ::..
-------------------------
Benutzeravatar
Hermann
Hacker
Hacker
Beiträge: 442
Registriert: 11. Mai 2004, 18:55
Wohnort: Duisburg
Kontaktdaten:

Re: Dateien sorteren

Beitrag von Hermann »

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

Gruß, Hermann
Chris
Member
Member
Beiträge: 117
Registriert: 3. Jan 2004, 18:28
Kontaktdaten:

Beitrag von Chris »

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
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3175
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

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: Alles auswählen

#!/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
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

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: Alles auswählen

#!/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.
Antworten