20

Моя камера выдает файлы вроде IMG_1234.JPG и MVI_1234.AVI с отметками времени на этих файлах. К сожалению, время не было установлено правильно, а временные метки отключены.

Я хотел бы установить временную метку файла на диске. (не данные EXIF).

Предлагаемый алгоритм:

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

Есть простой способ сделать это? возможно, можно было бы упростить вычисление, используя время эпохи (с тех пор, как секунды), и создать сценарий оболочки.

6 ответов6

37

touch может сделать это:

 $ 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

Чтобы изменить mtime, добавьте --time=mtime

11

Объединяя вышесказанное, если AM/PM был неправ ...

Исправьте метки времени файла:

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

Затем обновите информацию EXIF в файлах jpg до исправленной отметки времени:

$ jhead -dsft *.jpg

Не забудьте зафиксировать настройку времени в вашей камере.

2

перебирает все файлы в подкаталоге all: используйте stat, чтобы получить время эпохи / unix файлов в секундах, коснитесь, чтобы проанализировать сумму как новую дату для mtime и записать в файл

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

Pythonian подход см. https://stackoverflow.com/questions/1158076/implement-touch-using-python

2

Я делаю то же самое в OS X, и синтаксис touch здесь немного меняется.

Я использую:

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

Это отрегулирует +1 час 30 минут 7 секунд относительно первоначального измененного времени. '-013007' для возврата времени.

1

Linux, используя touch, чтобы изменить последнюю измененную метку времени:

Создайте файл с отметкой времени сейчас:

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

Измените отметку времени на 2 часа назад:

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

Измените отметку времени на 200 часов назад:

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

Измените отметку времени на 30 дней назад:

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:~$

Для махинаций установите дату последнего изменения в будущем:

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

Видимо, мы будем вечеринкой, как сегодня вечером 3012.

0

Используйте jhead:

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

Отрегулируйте время, сохраненное в заголовке Exif, на h:mm вперед или назад. Полезно при съемке с неправильным временем, установленным на камере, например, после путешествий по часовым поясам или при изменении летнего времени.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .