linux / shell: відносно змінити часову позначку для зміни файлу?


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

Чи є простий спосіб це зробити? можливо, можна було б спростити обчислення, використовуючи час епохи (секунди з моменту) та підключити сценарій оболонки.


Ключове слово - mtime. Однак я ще не знайшов рішення, оскільки мені потрібна зміна щодо mtime, а не поточного часу, як описано в unixtutorial.org/2008/11/…
індекс

Відповіді:


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


так, але це стосується вашого поточного системного часу, а не файлу .. спасибі, хоча ..
індекс

1
Коли я вперше відповів, так, але я відредагував відповідь. Коли ви використовуєте -r fileопцію, вона стає відносно цього файлу. Тож якщо у вас є час щодо того самого файлу, яким ви маніпулюєте, ви отримуєте те, що хочете.
rescdsk

Блискуче, дякую. Саме те, що я шукав.
Артем Русаковський

@rescdsk, просто з цікавості, як ця зміна вплине на криміналістичний аналіз файлу? якщо ви змінили файл, але потім встановили його модифіковану дату назад до попереднього значення, чи виявиться це в метаданих inode чи інших файлових системах? Чи впливатиме цей аналіз на аналіз?
Френк Томас

@FrankThomas, вибач, у мене немає поняття!
rescdsk

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, щоб отримати файли epoch / unix час у секундах, нехай торкається аналізує суму як нову дату для mtime та записує у файл

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

про пітонічний підхід див. https://stackoverflow.com/questions/1158076/implement-touch-using-python


просто для уточнення, це означає, що аналізатор дати корутілу приймає не лише відносні, семантичні часи, але й насправді може обчислити! Просто вказавши на це, оскільки я не знайшов цієї інформації в документації ( gnu.org/software/coreutils/manual/… ) [Це насправді є: "Відносні елементи коригують дату (або поточну дату, якщо такої немає) вперед або назад. Ефекти відносних предметів накопичуються. "]
індекс

2

Я роблю те саме в OS X, і синтаксис дотику тут трохи змінюється.

Я використовую:

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

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


Побічна примітка: хоча кращий за нічого, цей синтаксис є кошмаром сценаріїв.
tuomassalo

Це саме те, що я шукав (занадто лінивий RTFM: D). Дякую!
Мішель Далл'Агата

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

Для shenanigans встановіть останню змінену дату в майбутньому:

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 сьогодні ввечері.


В останньому прикладі "майбутнього", чи не мінус ( -) не говорить про те, щоб пройти 400 000 днів у минулому , і все-таки це закінчиться в майбутньому? Або зачекайте, чи ви говорите дотик, щоб подвоїти дату, мінус + тому = майбутнє ...? Yar
matey

0

Використовуйте jhead:

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

Відрегулюйте час, збережений у заголовку Exif, h: мм назад або вперед. Корисно для фотографування з невірним часом, встановленим на камері, наприклад, після подорожі по часових поясах або коли літній час змінився.


Дякуємо за підказку, це схоже на exif та exifTool і подібно до функції "Налаштування дати та часу" digiKam - але я хотів би змінити системну дату файлу. Ще одна проблема полягає в тому, що моя розумна ОС, здається, перетворює час на місцевий час на льоту, і DST запустив один час :-)
індекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.