linux / shell: Bir dosyanın değişiklik zaman damgasını değiştirilsin mi?


20

Kameram gibi dosyalar oluşturur IMG_1234.JPGve MVI_1234.AVIbu dosyalar üzerinde damgaları ile. Maalesef, zaman düzgün bir şekilde ayarlanmadı ve zaman damgaları kapalı.

Dosyanın zaman damgasını diskte ayarlamak istiyorum. (EXIF verileri değil).

Önerilen algoritma:

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

Bunu yapmanın kolay bir yolu var mı? belki biri çağ zamanını (o zamandan beri saniye) kullanarak hesaplamayı basitleştirebilir ve bir kabuk komut dosyası hazırlayabilir.


Anahtar kelime mtime. Bununla birlikte, henüz bir çözüm bulamadım, çünkü dosyanın zamanına göre bir değişiklik yapmam gerekiyor, unixtutorial.org/2008/11/…
indeks

Yanıtlar:


38

touch bunu yapabilirsin:

 $ 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’yı değiştirmek için --time=mtime


evet, ama bu şu anki sistem saatinize göre, dosyanın değil .. teşekkürler, yine de ..
endeks

1
İlk cevapladığımda evet, ama cevabı değiştirdim. Bu -r fileseçeneği kullandığınızda, o dosyaya göre olur. Bu yüzden, zamanınızı değiştirdiğiniz dosyaya göre görecekseniz, istediğinizi elde edersiniz.
rescdsk 23.0310

Harika, teşekkür ederim. Tam olarak aradığım şey.
Artem Russakovskii

@rescdsk, sadece meraktan uzak, bu değişiklik dosyanın adli bir analizini nasıl etkiler? Bir dosyayı değiştirdiyseniz ancak değiştirilen tarihini önceki değerine ayarladıysanız, bu inode'da veya diğer dosya sistemi meta verilerinde algılanabilir mi? dergicilik bu analizi etkiler mi?
Frank Thomas

@ FrankThomas, üzgünüm, hiçbir fikrim yok!
rescdsk

11

Yukarıdakileri birleştirerek, eğer AM / PM yanlışsa ...

Dosya zaman damgalarını düzeltin:

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

Ardından, jpg dosyalarındaki EXIF ​​bilgisini düzeltilmiş zaman damgasına güncelleyin:

$ jhead -dsft *.jpg

Kameradaki zaman ayarını düzeltmeyi unutma.


2

alt dizindeki tüm dosyalar üzerinde yinelenir: tüm dosyaları epoch / unix zamanını saniyeler içinde almak için stat komutunu kullanın, mtime için toplamı yeni tarih olarak ayrıştırmaya ve dosyaya yazmaya dokunun

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

Piton yaklaşımı için /programming/1158076/implement-touch-using-python adresini ziyaret edin.


Sadece açıklığa kavuşturmak için, bu, corutil'in tarih ayrıştırıcısının yalnızca göreceli, anlamsal zamanları kabul etmediği, aslında hesaplayabildiği anlamına gelir! Sadece bu bilgileri belgelerde bulamadığım için işaret ettim ( gnu.org/software/coreutils/manual/… ) [Aslında orada: "Göreceli öğeler bir tarihi (veya eğer yoksa geçerli tarihi) ileri veya geri ayarlar. Bağıl maddelerin etkisi birikir. "]
endeks

2

OS X'te de aynı şeyi yapıyorum ve dokunuşun sözdizimi burada biraz değişiyor.

Ben kullanıyorum:

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

Bu, + 1saat 30 dak. '-013007'zamanı geri çevirmek için.


Not: hiç yoktan iyidir, ancak bu sözdizimi kod yazmanın kabusu.
tuomassalo

Tam olarak aradığım şey buydu (RTFM: D'ye çok tembel). Teşekkürler!
Michele Dall'Agata

1

Linux, son değiştirilen zaman damgasını değiştirmek için dokunuş kullanarak:

Şimdi zaman damgası olan bir dosya oluşturun:

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

Zaman damgasını 2 saat önce olacak şekilde değiştirin:

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

Zaman damgasını 200 saat önce olacak şekilde değiştirin:

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

Zaman damgasını 30 gün önce olacak şekilde değiştirin:

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

Shenanigan'lar için gelecekteki en son değiştirilen tarihi ayarlayın:

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

Görünüşe göre, bu gece 3012 gibi parti yapacağız.


Son “gelecek” örneği için, eksi ( -) geçmişte 400.000 güne kadar gitmek için dokunma söylemiyor ve henüz gelecekte bitiyor mu? Ya da bekle, eksi + ago = gelecek ... tarihini iki kez negatif olarak mı dokunacağınızı söylüyorsunuz? Yar
matey

0

Jhead kullanın:

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

Exif başlığında saklanan süreyi h: mm geriye veya ileriye doğru ayarlayın. Zaman dilimleri arasında seyahat ettikten sonra veya gün ışığından yararlanma saati değiştiğinde olduğu gibi, fotoğraf makinesinde yanlış zamana sahip fotoğraflar çekerken kullanışlıdır.


Tavsiyeniz için teşekkürler, bu exif ve exifTool ile benzer ve digiKam'in "Tarih ve Saati Ayarla" özelliğine benzer - ancak dosyanın sistem tarihini değiştirmek istiyorum. Diğer bir sorun, akıllı işletim sistemimin zamanları yerel saate dönüştürüyor gibi görünmesi ve DST'nin bir zaman diliminde başlaması :-)
endeks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.