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/…
ดัชนี

คำตอบ:


38

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

ยอดเยี่ยมขอบคุณ สิ่งที่ฉันกำลังมองหา
Artem Russakovskii

@rescdsk เพิ่งออกจากความโค้งการเปลี่ยนแปลงนี้จะส่งผลต่อการวิเคราะห์ทางนิติเวชของไฟล์อย่างไร หากคุณแก้ไขไฟล์ แต่จากนั้นตั้งค่าวันที่แก้ไขกลับเป็นค่าก่อนหน้านี้จะตรวจพบได้ใน inode หรือ metadata ของระบบไฟล์อื่น ๆ หรือไม่? การทำเจอร์นัลจะส่งผลกระทบต่อการวิเคราะห์นี้หรือไม่
Frank Thomas

@ 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 time ในไม่กี่วินาทีให้สัมผัสแจงผลรวมเป็นวันที่ใหม่สำหรับ mtime และเขียนลงไฟล์

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

สำหรับวิธีการแบบ pythonian โปรดดูที่/programming/1158076/implement-touch-using-python


เพียงชี้แจงให้ชัดเจนซึ่งหมายความว่าตัวแยกวิเคราะห์วันที่ของ corutil ไม่เพียง แต่ยอมรับเวลาสัมพัทธ์ความหมาย แต่สามารถคำนวณได้จริง! เพียงชี้ไปที่ฉันไม่พบข้อมูลในเอกสาร ( gnu.org/software/coreutils/manual/ ...... ) [ที่จริงแล้วมี: "รายการที่เกี่ยวข้องปรับวันที่ (หรือวันที่ปัจจุบันถ้าไม่มี) ไปข้างหน้าหรือข้างหลัง ผลกระทบของรายการที่เกี่ยวข้องสะสม "]
ดัชนี

2

ฉันกำลังทำสิ่งเดียวกันใน OS X และไวยากรณ์ของการสัมผัสแตกต่างกันเล็กน้อย

ฉันใช้:

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

สิ่งนี้จะปรับ + ​​1 ชั่วโมง 30 นาที 7 วินาทีเมื่อเทียบกับเวลาที่แก้ไขดั้งเดิม '-013007'สำหรับการย้อนเวลากลับไป


หมายเหตุด้านข้าง: แม้ว่าจะดีกว่าไม่มีอะไรเลยไวยากรณ์นี้เป็นฝันร้ายสำหรับการสร้างสคริปต์
tuomassalo

นั่นคือสิ่งที่ฉันกำลังมองหา (ขี้เกียจเกิน RTFM: D) ขอบคุณ!
Michele Dall'Agata

1

Linux, ใช้การสัมผัสเพื่อเปลี่ยนการประทับเวลาที่แก้ไขล่าสุด:

สร้างไฟล์ด้วยการประทับเวลาตอนนี้:

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
Xen2050

0

ใช้ jhead:

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

ปรับเวลาที่เก็บไว้ในส่วนหัว Exif โดย h: mm ไปข้างหลังหรือไปข้างหน้า มีประโยชน์เมื่อถ่ายภาพโดยตั้งเวลาผิดบนกล้องเช่นหลังจากเดินทางข้ามเขตเวลาหรือเมื่อมีการเปลี่ยนแปลงเวลาออมแสง


ขอบคุณสำหรับเคล็ดลับสิ่งนี้คล้ายกับ exif และ exifTool และชอบคุณลักษณะ "ปรับวันที่และเวลา" ของ digiKam - แต่ฉันต้องการแก้ไขวันที่ของระบบของไฟล์ ปัญหาอีกอย่างก็คือระบบปฏิบัติการอัจฉริยะของฉันดูเหมือนจะแปลงเวลาเป็นเวลาท้องถิ่นได้อย่างรวดเร็วและ DST ได้เตะในโซนเวลาเดียว :-)
ดัชนี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.