Answers:
EXIF处理工具exiv2
对此具有内置选项:
exiv2 -T rename image.jpg
将最后一次文件修改的时间设置为 mtime
EXIF元数据中存储的日期。
您要求使用创建时间-但在类似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
相反。
-t
做的。实际上,它似乎实际上是在做什么-T
。
如果您从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
假设,正如“ 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
也可以使用以下jhead
命令进行:
$ jhead -ft file.jpg
-dsft
。-ft
相反。
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
行之前添加。