在 Mac 过滤掉具有不同 exif 日期的照片
filter out photos with different exif date on Mac
我正在寻找一种在 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 变量作为 fields/tags,我想获取变量名称以便进行比较他们稍后,所以我添加了 -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 文件)并且只打印 "unhappy" 文件:
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, ' != {print }'
注意上面只执行一个exiftool
进程。我想你可能想避免 运行 对每个文件 exiftool
一个全新的过程,所以不要这样做:
find ... -iname "*.jpg" -exec exiftool ... {} \;
我认为您可以使用 -r
递归到子目录,但我还没有尝试过。
顺便说一下,在 macOS 上,您可以使用 homebrew:
最简单地安装 exiftool
brew install exiftool
关键字:exiftool,创建日期。修改日期, EXIF 日期, 匹配, 不匹配, 照片, 照片, prime.
我正在寻找一种在 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 变量作为 fields/tags,我想获取变量名称以便进行比较他们稍后,所以我添加了 -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 文件)并且只打印 "unhappy" 文件:
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, ' != {print }'
注意上面只执行一个exiftool
进程。我想你可能想避免 运行 对每个文件 exiftool
一个全新的过程,所以不要这样做:
find ... -iname "*.jpg" -exec exiftool ... {} \;
我认为您可以使用 -r
递归到子目录,但我还没有尝试过。
顺便说一下,在 macOS 上,您可以使用 homebrew:
最简单地安装exiftool
brew install exiftool
关键字:exiftool,创建日期。修改日期, EXIF 日期, 匹配, 不匹配, 照片, 照片, prime.