[gelöst] Datum teilweise ändern bei Dateien

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
karmon
Beiträge: 82
Registriert: 23.05.2005 00:12:30

[gelöst] Datum teilweise ändern bei Dateien

Beitrag von karmon » 22.10.2007 11:01:12

Hallo an alle,

in einem ähnlichen thread in diesem Forum habe ich leider keine Lösung gefunden.

Ich versuche gerade folgende Aufgabe zu lösen:
Für eine Datei (bzw. mehrere) soll nur ein Teil des Datums, nämlich das Jahr, geändert werden.
Tag, Monat und Uhrzeit soll erhalten bleiben.

Der Hintergrund ist der, dass in einer Digicam das Jahr verstellt war und einige Dateien nun eine mtime mit dem Jahr 2006 statt 2007 tragen.

Ich hab mir mal die Optionen mit "man touch" angesehen und mit touch -d und touch -t herumprobiert.
Leider weiß ich nicht, welche Platzhalter für Tag, Monat und Zeit zu nehmen sind, da diese ja nicht geändert werden sollen.

Code: Alles auswählen

touch -d 2006
ändert die Uhrzeit auf 20:06 Uhr, was natürlich nicht das gewünschte Ergebnis ist. :roll:

Hat jemand eine Idee dazu oder gibt es noch andere Möglichkeiten, nur das Jahr zu verändern ?

Gruß,
Karmon
Zuletzt geändert von karmon am 22.10.2007 17:26:52, insgesamt 1-mal geändert.

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 22.10.2007 11:25:11

beispiel:

Code: Alles auswählen

$ touch -t 0701031305 foobar
$ ls -l foobar 
-rw-r--r-- 1 startx startx 0 2007-01-03 13:05 foobar
[quote][/quote]
die jahresangabe ist optional, deshalb geht auch:

Code: Alles auswählen

$ touch -t 01031308 foobar
$ ls -l foobar 
-rw-r--r-- 1 startx startx 0 2007-01-03 13:08 foobar
Zuletzt geändert von startx am 22.10.2007 12:48:32, insgesamt 1-mal geändert.

karmon
Beiträge: 82
Registriert: 23.05.2005 00:12:30

Beitrag von karmon » 22.10.2007 11:51:11

Danke für die schnelle Antwort.

Die komplette Änderung des Datums ist mir schon klar, aber das ist leider nicht das, wonach ich suche.
Wie schon beschrieben benötige ich eine Möglichkeit nur das Jahr zu ändern.
Die jeweilige Zeit, sowie Monat und Tag sollen für jede Datei individuell erhalten bleiben.
(Da es viele Dateien sind, will ich nicht für jede einzelne Datei deren restliches Datum von Hand eingeben müssen.)
Also so etwas wiie

Code: Alles auswählen

touch -d 2006[Platzhalter für restliches Datum] *.jpg

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 22.10.2007 12:26:47

hi,

gegen fehlende Platzhalter hilft ein kleines Script

Code: Alles auswählen

#!/bin/sh

for DATEI ; do
   MTIME=`date +"%m%d%H%M.%S" --reference="$DATEI"`
   touch -t 2006$MTIME "$DATEI"
done
man beachte das -t statt -d bei touch, -d kenn' ich nicht,
obwohl ich den Verdacht hab', daß das viel geeigneter wäre.

Wenn man das z.B. chdate nennt und ausführbar macht,
kann man es ganz normal aufrufen

Code: Alles auswählen

chdate *.jpg
Beware of programmers who carry screwdrivers.

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 22.10.2007 12:48:04

Code: Alles auswählen

man beachte das -t statt -d bei touch, -d kenn' ich nicht, 
d kann das jahr alleine aendern, aber soweit ich sehe nur relativ zum aktuellen datum:

Code: Alles auswählen

ls -l foobar 
-rw-r--r-- 1 startx startx 0 2007-10-22 11:47 foobar
$ touch --date="+3 year" foobar 
$ ls -l foobar 
-rw-r--r-- 1 startx startx 0 2010-10-22 11:47 foobar
$ 


cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 22.10.2007 12:51:59

ha! hab' ich es doch geahnt, das ist doch genau, was karmon braucht:
von 2007 auf 2006 ändern ist relativ genau minus 1 Jahr...

wenn man mit --reference=$DATEI das Datum der fraglichen Datei nimmt.

Frag ich mich nur, warum meine man-Page das verschweigt :evil:
Beware of programmers who carry screwdrivers.

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 22.10.2007 12:56:49

schon ja, ich frage mich aber warum es nicht absolut zu setzen ist. faende ich naheliegender als
als relativ zu einem anderen datum.

karmon
Beiträge: 82
Registriert: 23.05.2005 00:12:30

Beitrag von karmon » 22.10.2007 13:53:32

Habe gerade beides ausprobiert.

Der Befehl

Code: Alles auswählen

touch --date="+3 year" foobar
hilft mir leider nicht weiter.
Es wird zwar das Jahr geändert, aber was in deinem Bsp. nicht sofort ersichtlich ist, ist die Tatsache, dass für den Monat, den Tag und die Uhrzeit die aktuelle Systemzeit gesetzt wird.
Somit scheidet diese Methode leider aus.

Das script von cosmac hat dagegen perfekt funktioniert.
Das war genau das, was ich gesucht habe.
Vielen Dank. :)

Gruß,
Karmon

Antworten