เปลี่ยนวันที่สร้างไฟล์จากเมตาดาต้า JPEG EXIF


29

เมื่ออัปโหลดไปยังไซต์ ftp วันที่สร้างไฟล์ต้นฉบับดูเหมือนว่าจะหายไปและฉันได้รับวันที่อัปโหลดแทน อย่างไรก็ตามข้อมูล Exif ในไฟล์นั้นถูกต้อง มีเครื่องมือในการเปลี่ยนวันที่สร้างจากวันที่ Exif หรือไม่


1
โปรดพิจารณายอมรับคำตอบที่คุณพบว่ามีประโยชน์มากที่สุด ด้วยวิธีนี้คนอื่นที่ค้นหาคำถามนี้จะเห็นว่าทำเครื่องหมายว่า "ตอบแล้ว" นอกจากนี้ยังเป็นวิธีให้รางวัลแก่บุคคลที่ใช้เวลาในการช่วยเหลือคุณ
Dmitry Grigoryev

คำตอบ:


27

เครื่องมือจัดการ EXIF exiv2มีตัวเลือกในตัวสำหรับสิ่งนี้:

exiv2 -T rename image.jpg

ตั้งค่าเวลาของการแก้ไขไฟล์ล่าสุด mtimeเป็นวันที่เก็บไว้ในข้อมูลเมตาของ EXIF

คุณขอให้ใช้เวลาสร้าง - แต่ไม่ได้ใช้ในระบบเหมือน Unix - และมีเหตุผลที่ดีสำหรับสิ่งนั้น: /unix/27297/why-doesnt-nix-keep-track -of ไฟล์สร้างเวลา

ฉันค่อนข้างแน่ใจว่าเวลาที่คุณโทรสร้างเวลาจริงmtime- ไม่มีปัญหา


จากman exiv2:

NAME
        exiv2 - Image metadata manipulation tool

 SYNOPSIS
        exiv2 [options] [action] file ...

 DESCRIPTION
        exiv2 is a program to read and write Exif, IPTC and XMP image metadata and image com‐
        ments. The following image formats are supported:

 [ ... ]

 mv | rename
       Rename files and/or set file timestamps according to the Exif create time‐
       stamp.  Uses  the  value  of  tag  Exif.Photo.DateTimeOriginal  or, if not
       present, Exif.Image.DateTime to determine the timestamp. The filename for‐
       mat can be set with -r fmt, timestamp options are -t and -T.

 [ ... ]

 -T     Only  set  the  file  timestamp according to the Exif create timestamp, do not
        rename the file (overrides -k). This option is only  used  with  the  'rename'
        action.  Note:  On Windows you may have to set the TZ environment variable for
        this option to work correctly.


ดูตัวเลือกที่-tจะทำตรงข้าม


7

หากคุณติดตั้ง exiftool จาก CPAN คุณสามารถเรียกใช้สคริปต์ต่อไปนี้โดยสมมติว่าไฟล์ทั้งหมดของคุณอยู่ในไดเรกทอรีที่เรียกว่า "all"

#!/bin/sh
for i in all/*; do
    SPEC=`exiftool -t -s -d "%Y-%m-%d %H:%M:%S" -CreateDate "$i"`
    read X DATE <<<${SPEC}
    echo "$i:$DATE"
    touch -d "$DATE" "$i"
done

คุณสามารถอธิบายสิ่งที่สคริปต์นี้กำลังทำอยู่? โดยเฉพาะอย่างยิ่ง args สำหรับexiftool
user5359531

5

สมมติว่า 'Volker Siegel' ที่คุณอาจหมายถึง mtime ฉันจะใช้ฟังก์ชัน exiftools builtin อย่างง่าย ๆ ..

ชอบ:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

สิ่งนี้จะใช้ข้อมูล "เขตข้อมูล exif" DateTimeOriginal "และใช้เพื่อตั้งค่าข้อมูลวันที่ / เวลาที่แก้ไขของระบบไฟล์ของไฟล์" test.jpg "

ตัวอย่าง:

$ ls -la test.jpg
-rw-r-----@ 1 user  18329968  2432451 14 Out 17:57 test.jpg

$ exiftool -DateTimeOriginal test.jpg
Date/Time Original              : 2015:10:09 13:29:58

$ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg
    1 image files updated

$ ls -la test.jpg
-rw-r-----@ 1 user  18329968  2432451  9 Out 13:29 test.jpg

3

ExifTool สามารถอ่านและจัดการข้อมูล EXIF ​​ส่วนใหญ่รวมถึงการแยกแท็ก Date / Time Original หรือสร้าง Data EXIF คุณสามารถใช้ข้อมูลนี้เพื่อเปลี่ยนชื่อไฟล์หรือเปลี่ยนการประทับเวลา ตัวอย่างเช่น:

find -name '*.jpg' | while read PIC; do
    DATE=$(exiftool -p '$DateTimeOriginal' $PIC |
    sed 's/[: ]//g')
    touch -t $(echo $DATE | sed 's/\(..$\)/\.\1/') $PIC
done

นี่จะค้นหาไฟล์ JPG ทั้งหมดในไดเรกทอรีปัจจุบันและอัปเดตการประทับเวลา

หากคุณต้องการตั้งชื่อให้กับไฟล์เหล่านั้นตามวันที่นั้น (ซึ่งมีแนวโน้มว่าจะมีประโยชน์) จากนั้นก็เพิ่มmv -i $PIC $(dirname $PIC)/$DATE.jpgเข้าไปในdoneบรรทัดก่อน


3

มันสามารถทำได้โดยใช้jheadคำสั่ง:

$ jhead -ft file.jpg

สำหรับ Jhead 3.0 -dsftตัวเลือกคือ -ftไม่ตรงข้าม
Tesquin Crydd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.