例子:

例子:

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

答案1

EXIF 处理工具exiv2为此有一个内置选项:

exiv2 -T rename image.jpg

将上次文件修改时间 设置 mtime为 EXIF 元数据中存储的日期。

您要求使用创建时间 - 但这在类 Unix 系统中不使用,并且有有充分的理由

我很确定您调用创建时间的时间实际上是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请参阅执行相反操作的选项。

答案2

假设,正如“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

答案3

也可以使用jhead命令来制作:

$ jhead -ft file.jpg

手册页:

-ft 将文件的系统时间戳设置为 Exif 标头中存储的时间戳。

-dsft 将 Exif 时间戳设置为文件的时间戳。需要预先存在 Exif 标头。如果需要,请使用-mkexif选项创建一个。

答案4

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行之前添加。

相关内容