我正在macOS上寻找一种方法来过滤创建日期与exif照片日期不匹配的照片。做这件事的最佳工具是什么?
我不是exiftool
的专家,但我认为我得到了你想要的90%的东西。我一步一步写出来,这样:
- 如果它不是你想要的,你可以调整它,并且
- 这样我就能记住我将来做了什么:-(
所以第一件事是使用exiftool
来获取与日期相关的所有内容:
exiftool image.jpg | grep -i date
File Modification Date/Time : 2021:01:14 10:51:38+00:00
File Access Date/Time : 2021:01:14 10:51:40+00:00
File Inode Change Date/Time : 2021:01:14 10:51:38+00:00
Modify Date : 2013:03:09 08:59:50
Date/Time Original : 2013:03:09 08:59:50
Create Date : 2013:03:09 08:59:50
这看起来很有用,但在内部exiftool
使用Perl变量作为字段/标记,我想获得变量名,以便稍后进行比较,所以我添加了-s
:
exiftool -s image.jpg | grep -i date
FileModifyDate : 2021:01:14 10:51:38+00:00
FileAccessDate : 2021:01:14 10:51:40+00:00
FileInodeChangeDate : 2021:01:14 10:51:38+00:00
ModifyDate : 2013:03:09 08:59:50
DateTimeOriginal : 2013:03:09 08:59:50
CreateDate : 2013:03:09 08:59:50
好的,我想你想要FileModifyDate
和DateTimeOriginal
,所以让我们检查一下我们可以打印它们:
exiftool -p '$Filename, $FileModifyDate, $DateTimeOriginal' image.jpg
image.jpg, 2021:01:14 10:51:38+00:00, 2013:03:09 08:59:50
请注意,必须在macOS/Linux上使用单引号,否则bash
shell会尝试展开变量,但它会展开为空-除非您碰巧有一个名为DateTimeOriginal
的bash
变量。我想你必须在Windows上使用双引号,因为它通常不理解单引号。
这很好,但你对小时、分钟和秒不感兴趣,所以我们可以改变exiftool
考虑日期的方式,用-d
:只看年、月和日
exiftool -d %F -p '$Filename, $FileModifyDate, $DateTimeOriginal' image.jpg
image.jpg, 2021-01-14, 2013-03-09
现在我们想用if
语句检查它们是否相同(对于所有JPEG文件(,并且只打印"不快乐">文件:
exiftool -d %F -if '$FileModifyDate !~ $DateTimeOriginal' -p '$FileName' *.jpg
image.jpg
iphone.jpg
2 files failed condition
如果您对Perl这样的字符串比较有点不安,可以使用awk
进行测试和打印,如下所示:
exiftool -d %F -p '$Filename, $FileModifyDate, $DateTimeOriginal' *.jpg | awk -F, '$2 != $3{print $1}'
注意,以上仅执行单个exiftool
过程。我认为您可能希望避免对每个文件都运行exiftool
的全新进程,所以不要这样做:
find ... -iname "*.jpg" -exec exiftool ... {} ;
我认为您可以使用-r
递归到子目录中,但我还没有尝试过。
顺便说一句,在macOS上,您可以使用自制程序最简单地安装exiftool
:
brew install exiftool
关键字:exiftool,创建日期。修改日期,EXIF日期,匹配,不匹配,照片,照片,prime。