Answers:
在Linux上,可以使用命令exiftool。由于某些原因,在线手册中没有包含“重新命名示例”部分,这给了我基本的提示。
对于仅JPG文件,应执行以下命令调用:
exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>
说明:
-r
用于递归'-FileName<CreateDate'
告诉exiftool将文件相应地重命名为其EXIF标签CreateDate
(不过,您可以尝试其他操作ModifyDate
)-d '%Y-%m-%d/%H_%M_%S%%-c.%%le'
告诉如何从日期源“ CreateDate
” 构建文件名字符串(“ %-c
”将在文件冲突的情况下附加一个计数器,“ %le
”表示“小写的文件扩展名”)
-FileName<...
在这里使用“ ”来重命名文件并将其移动到一个步骤中。该手册指出,您必须使用“ -Directory<...
”语法进行文件夹操作。它对我来说是这样的。您应该花一些时间阅读此功能强大的工具的手册。也许有一个更短的方法:D
试试这个免费产品:AmoK Exif Sorter。
我做了一个小的但不是非常优化的python脚本,我认为您打算做什么:
1 import pyexiv2, sys, os, time, datetime, random
2 dirname = sys.argv[1]
3 flist=os.listdir(dirname)
4 dic = dict()
5 for fname in flist:
6 metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
7 metadata.read()
8 tag = metadata['Exif.Image.DateTime']
9 timestamp = int(time.mktime(tag.value.timetuple()))
10 #print fname, ' ', tag.value, ' ', timestamp
11 try:
12 dic[timestamp] = fname
13 except:
14 print fname, ' not processed.'
15
16 keys = dic.keys()
17 keys.sort()
18 i = 0
19 for k in keys:
20 os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
21 i+=1
要使其在Debian Lenny中工作,请尝试以下操作:
import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
image = pyexiv2.Image(sys.argv[1]+'/'+fname)
#metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
#metadata.read()
image.readMetadata()
tag = image['Exif.Image.DateTime']
timestamp = int(time.mktime(tag.timetuple()))
#print fname, ' ', tag.value, ' ', timestamp
try:
dic[timestamp] = fname
except:
print fname, ' not processed.'
keys = dic.keys()
keys.sort()
i = 0
for k in keys:
os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
i+=1
在PHP中,我做了这样的事情:
<?php
$path = "./path/to/images";
$files = scandir($path);
foreach ( $files as $file )
{
if ( $file[0] === "." )
{
continue;
}
$ext = end(explode(".", $file));
$suffix = "image";
$exif = exif_read_data($path."/".$file, 'EXIF');
$datetime = str_replace("/","-", $exif['DateTimeDigitized']);
rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext);
}
当我们使用它时,这是一种更“怪异的编程”风格,在中bash
,使用exiftool
可以一口气放到几个目录和/或单个文件上。它会跳过具有无法识别的mime类型的文件。
它使用DateTimeOriginal
EXIF标记重命名照片(因此结果不是,001.jpg
而是2015-12-22_14:43:15.jpg
。
如果存在命名冲突,则会应用索引号:2015-12-22_14:50:57.1.jpg
。