linux / shell: cambiare il timestamp di modifica di un file relativamente?


20

La mia fotocamera produce file simili IMG_1234.JPGe MVI_1234.AVIcon timestamp su quei file. Purtroppo l'ora non è stata impostata correttamente e i timestamp sono disattivati.

Vorrei impostare il timestamp del file sul disco. (non i dati EXIF).

Algoritmo proposto:

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

C'è un modo semplice per farlo? forse si potrebbe semplificare il calcolo usando il tempo di epoca (secondi da allora) e montare uno script di shell.


La parola chiave è mtime. Tuttavia, non ho ancora trovato una soluzione, poiché ho bisogno di una modifica rispetto al mtime del file, non l'ora corrente come descritto in unixtutorial.org/2008/11/…
indice

Risposte:


38

touch puoi fare questo:

 $ 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

Per modificare il mtime, aggiungi --time=mtime


si, ma questo è relativo al tuo attuale orario di sistema, non al file .. grazie, però ..
indice

1
Quando ho risposto per la prima volta, sì, ma ho modificato la risposta. Quando si utilizza l' -r fileopzione, diventa relativa a quel file. Quindi, se hai il tempo di essere relativo allo stesso file che stai manipolando, ottieni quello che vuoi.
rescdsk,

Fantastico, grazie. Esattamente quello che stavo cercando.
Artem Russakovskii,

@rescdsk, proprio per curiosità, in che modo questo cambiamento influirebbe su un'analisi forense del file? se si modifica un file, ma si reimposta la data modificata sul valore precedente, questo sarebbe rilevabile sull'inode o su altri metadati del filesystem? il journaling avrebbe un impatto su questa analisi?
Frank Thomas,

@FrankThomas, scusa, non ne ho idea!
rescdsk,

11

Combinando quanto sopra, se AM / PM era sbagliato ...

Correggere i timestamp del file:

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

Quindi aggiorna le informazioni EXIF ​​nei file jpg al timestamp corretto:

$ jhead -dsft *.jpg

Non dimenticare di fissare l'impostazione dell'ora nella tua fotocamera.


2

scorre su tutti i file nella sottodirectory all: usa stat per ottenere i file tempo / unix tempo in secondi, lascia toccare analizza la somma come nuova data per mtime e scrivi su file

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

per un approccio pythoniano consultare /programming/1158076/implement-touch-using-python


solo per chiarire, questo significa che il parser di date di corutil non solo accetta i tempi relativi, semantici, ma in realtà può calcolare! Faccio solo notare che non ho trovato quelle informazioni nella documentazione ( gnu.org/software/coreutils/manual/… ) [In realtà è lì: "Gli elementi relativi regolano una data (o la data corrente se nessuna) in avanti o indietro. Gli effetti delle voci relative si accumulano. "]
indice

2

Sto facendo la stessa cosa in OS X e la sintassi del tocco varia un po 'qui.

Sto usando:

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

Ciò regolerà + 1 ora e 30 minuti 7 secondi rispetto al tempo modificato originale. '-013007'per tornare indietro nel tempo.


Una nota a margine: sebbene migliore di niente, questa sintassi è un incubo per gli script.
tuomassalo,

Questo è esattamente quello che stavo cercando (troppo pigro per RTFM: D). Grazie!
Michele Dall'Agata,

1

Linux, usando il tocco per cambiare l'ultimo timestamp modificato:

Crea un file con il timestamp di ora:

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

Cambia il timestamp in modo che sia 2 ore fa:

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

Cambia il timestamp in modo che sia 200 ore fa:

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

Cambia il timestamp in modo che sia 30 giorni fa:

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

Per gli shenanigans, imposta la data dell'ultima modifica in futuro:

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

Apparentemente, stasera festeggeremo come se fosse 3012.


Per l'ultimo esempio "futuro", il segno meno ( -) non dice a touch di passare 400.000 giorni nel passato , eppure finisce in futuro? Oppure aspetta, stai dicendo al tocco di doppio negativo la data, meno + fa = futuro ...? Yar matey
Xen2050,

0

Usa jhead:

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

Regola il tempo memorizzato nell'intestazione Exif di h: mm indietro o avanti. Utile quando si sono scattate foto con l'ora sbagliata impostata sulla fotocamera, ad esempio dopo aver attraversato fusi orari o quando l'ora legale è cambiata.


Grazie per il suggerimento, è simile a exif ed exifTool e come alla funzione "Modifica data e ora" di digiKam - ma vorrei modificare la data di sistema del file. Un altro problema è che il mio sistema operativo intelligente sembra convertire al volo i tempi in ora locale e l'ora legale è partita in un fuso orario :-)
indice
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.