Linux / Shell: Ändern Sie den Änderungszeitstempel einer Datei relativ?

20

Meine Kamera erzeugt Dateien wie IMG_1234.JPGund MVI_1234.AVImit Zeitstempeln auf diesen Dateien. Leider wurde die Zeit nicht richtig eingestellt und die Zeitstempel sind ausgeschaltet.

Ich möchte den Zeitstempel der Datei auf der Festplatte einstellen. (nicht die EXIF-Daten).

Vorgeschlagener Algorithmus:

1 read file's modify date
2 add delta, i.e. hhmmss (preferred: change timezone)
3 write new timestamp

Gibt es eine einfache Möglichkeit, dies zu tun? Vielleicht könnte man die Berechnung mithilfe der Epochenzeit (seit Sekunden) vereinfachen und ein Shell-Skript erstellen.

Index
quelle
Das Schlüsselwort lautet mtime. Ich habe jedoch noch keine Lösung gefunden, da ich eine Änderung in Bezug auf die M-
Index vom

Antworten:

38

touch kann dies tun:

 $ ls -l something
-rw-rw-r-- 1 tgs tgs 0 2010-03-22 16:03 something
 $ touch -r something -d '-1 day' something 
 $ ls -l something 
-rw-rw-r-- 1 tgs tgs 0 2010-03-21 16:03 something

http://linux.about.com/library/cmd/blcmdl_touch.htm

Um die Uhrzeit zu ändern, fügen Sie hinzu --time=mtime

rescdsk
quelle
Ja, aber dies ist relativ zu Ihrer aktuellen Systemzeit, nicht zu der Datei.
Index
1
Als ich das erste Mal antwortete, ja, aber ich habe die Antwort bearbeitet. Wenn Sie die -r fileOption verwenden, wird sie relativ zu dieser Datei. Wenn Sie also die Zeit haben, relativ zu der Datei zu sein, die Sie bearbeiten, erhalten Sie, was Sie wollen.
Rescdsk
Genial, danke. Genau das, wonach ich gesucht habe.
Artem Russakovskii
@rescdsk, wie würde sich diese Änderung aus Neugier auf eine forensische Analyse der Datei auswirken? Wenn Sie eine Datei geändert und dann das Änderungsdatum auf den vorherigen Wert zurückgesetzt haben, ist dies in den Inode- oder anderen Metadaten des Dateisystems erkennbar? Würde sich das Journaling auf diese Analyse auswirken?
Frank Thomas
@FrankThomas, sorry, ich habe keine Ahnung!
Rescdsk
11

Kombination der oben genannten, wenn AM / PM falsch war ...

Korrigieren Sie die Dateizeitstempel:

#!/bin/sh
for i in all/*; do
  touch -r "$i" -d '-12 hour' "$i"
done

Aktualisieren Sie dann die EXIF-Informationen in den JPG-Dateien auf den korrigierten Zeitstempel:

$ jhead -dsft *.jpg

Vergessen Sie nicht, die Zeiteinstellung in Ihrer Kamera zu korrigieren.

Schwan
quelle
2

Durchläuft alle Dateien im Unterverzeichnis all: Verwenden Sie stat, um die Epoche / Unix-Zeit der Dateien in Sekunden abzurufen. Lassen Sie mtime die Summe als neues Datum analysieren und in die Datei schreiben

#!/bin/sh
for i in all/*; do
  touch -m -d "$(stat -c %y "$i") + 3600 sec" "$i"
done

Für einen Python-Ansatz siehe /programming/1158076/implement-touch-using-python

Index
quelle
Zur Verdeutlichung bedeutet dies, dass der Datumsparser von corutil nicht nur relative, semantische Zeiten akzeptiert, sondern auch tatsächlich berechnen kann! Ich weise nur darauf hin, dass ich diese Informationen nicht in der Dokumentation gefunden habe ( gnu.org/software/coreutils/manual/… ). Die Auswirkungen der relativen Elemente werden akkumuliert. "]
Index
2

Ich mache dasselbe in OS X und die Syntax der Berührung variiert hier ein bisschen.

Ich benutze:

touch -r "filename" -A '013007' "filename"

Dies stellt + 1Stunde 30Min. 7Sek. Gegenüber der ursprünglich geänderten Zeit ein. '-013007'zum Zurückdrehen der Zeit.

osbjmg
quelle
Eine Randnotiz: Diese Syntax ist zwar besser als nichts, aber ein Alptraum für das Scripting.
Tuomassalo
Genau das habe ich gesucht (zu faul für RTFM: D). Vielen Dank!
Michele Dall'Agata
1

Linux, mit touch, um den zuletzt geänderten Zeitstempel zu ändern:

Erstellen Sie eine Datei mit dem Zeitstempel von jetzt:

el@apollo:~$ touch myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 22 09:25 myfile.txt

Ändern Sie den Zeitstempel auf vor 2 Stunden:

el@apollo:~$ touch -d "2 hours ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 22 07:25 myfile.txt

Ändern Sie den Zeitstempel auf vor 200 Stunden:

el@apollo:~$ touch -d "200 hours ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 14 01:25 myfile.txt

Ändern Sie den Zeitstempel auf 30 Tage:

el@apollo:~$ touch -d "30 days ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Jul 23 09:25 myfile.txt
el@apollo:~$

Legen Sie für Spielereien das letzte Änderungsdatum in der Zukunft fest:

el@apollo:~$ touch -d "-400000 days ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Oct 21  3012 myfile.txt

Anscheinend werden wir heute Abend 3012 feiern.

Eric Leschinski
quelle
Sagt das Minuszeichen ( -) im letzten Beispiel "Zukunft" nicht , dass 400.000 Tage in der Vergangenheit vergangen sein sollen , und dass es dennoch in der Zukunft enden soll? Oder warten Sie, sagen Sie Touch, dass das Datum doppelt negativ sein soll, minus + vor = Zukunft ...? Yar Matey
Xen2050
0

Benutze jhead:

http://www.sentex.net/~mwandel/jhead/usage.html

Passen Sie die im Exif-Header gespeicherte Zeit um h: mm vorwärts oder rückwärts an. Nützlich, wenn Sie Bilder mit der falschen Zeit in der Kamera aufgenommen haben, z. B. nach dem Überqueren von Zeitzonen oder wenn sich die Sommerzeit geändert hat.

compie
quelle
Vielen Dank für den Tipp, dieser ähnelt exif und exifTool und ähnelt der Funktion "Datum und Uhrzeit anpassen" von digiKam, aber ich möchte das Systemdatum der Datei ändern. Ein weiteres Problem ist, dass mein Smart-Betriebssystem die Zeiten im laufenden Betrieb in Ortszeit umzurechnen scheint und die Sommerzeit in einer Zeitzone aktiviert wurde :-)
Index