从JPEG EXIF元数据更改文件创建日期


29

当上传到ftp站点时,原始文件的创建日期似乎丢失了,我得到了上传日期。但是,该文件中的Exif数据是正确的。是否有工具可以从Exif日期批量更改创建的日期?


1
请考虑接受您认为最有帮助的答案。这样,其他搜索此问题的人将看到该问题标记为“已回答”。这也是一种奖励那些花费时间帮助您的人的方法。
德米特里·格里戈里耶夫

Answers:


27

EXIF处理工具exiv2对此具有内置选项:

exiv2 -T rename image.jpg

将最后一次文件修改的时间设置为 mtimeEXIF元数据中存储的日期。

您要求使用创建时间-但在类似Unix的系统中未使用-这样做有充分的理由:https : //unix.stackexchange.com/questions/27297/why-doesnt-nix-keep-track文件创建时间

我很确定您所说的创建时间实际上是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相反。


我将“相反”解释为从文件时间戳设置EXIF时间戳,但这不是这样-t做的。实际上,它似乎实际上是在做什么-T
迈克尔

7

如果您从CPAN安装exiftool,则可以运行以下脚本,假设您的所有文件都位于名为“ 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

你能描述一下这个脚本在做什么吗?特别是针对exiftool
user5359531

5

假设,正如“ Volker Siegel”所提到的,您可能是指mtime,我将简单地使用exiftools内置函数。

喜欢:

 $ 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

4

也可以使用以下jhead命令进行:

$ jhead -ft file.jpg

对于Jhead 3.0,该选项为-dsft-ft相反。
Tesquin Crydd,

jhead似乎是唯一不带有EXIF标头的EXIF工具-exiftool和exiv2实际上会增加文件的大小并移动标头,这对我来说是完全不可接受的。
迈克尔

3

ExifTool可以读取和处理大多数EXIF信息,包括提取原始日期/时间或创建数据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行之前添加。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.