咨询Linux下批量修改DLSR照片文件时间时区的命令方法
没问题,这是个非常常见的时区乌龙场景,在Linux上我们有几个靠谱的工具能批量搞定这个事儿,最实用的当属exiftool——专门处理照片元数据的神器,另外还要兼顾文件系统的时间戳同步。下面分步骤来操作:
第一步:先确认要处理的照片范围
首先得搞清楚哪些是回国后拍的照片。你可以先拿一张典型照片查看它的EXIF拍摄时间(相机记录的UTC+9时间):
exiftool -DateTimeOriginal IMG_1234.jpg
输出会类似2024:05:02 14:30:00,这个时间比实际GMT时间早了9小时,我们的目标就是把这类时间统一减去9小时。
第二步:用exiftool批量调整EXIF时间戳
照片里的核心时间字段包括拍摄时间、修改时间、数字创建时间,我们可以一次性把这些字段都调整过来:
exiftool "-DateTimeOriginal-=0:0:0 9:0:0" "-ModifyDate-=0:0:0 9:0:0" "-CreateDate-=0:0:0 9:0:0" /path/to/your/photos/
- 命令里的
-=0:0:0 9:0:0表示减去0年0月0天,9小时0分0秒,刚好抵消时区差 - 如果想先做测试(不实际修改文件),可以加上
-testname参数,只会预览修改结果不会改动原文件 - exiftool默认会给原文件加
_original后缀做备份,要是你不需要备份,再加个-overwrite_original参数就行
第三步:同步文件系统时间戳
除了EXIF元数据,照片的文件系统修改时间(mtime)可能也和相机记录的UTC+9时间一致,我们可以把它同步为调整后的EXIF时间:
exiftool "-FileModifyDate<DateTimeOriginal" /path/to/your/photos/
这个命令会把文件的系统修改时间设置为刚才调整好的拍摄时间,保证元数据和文件系统时间统一。
第四步:精准筛选要处理的照片(可选)
如果你不想修改所有照片,只想处理回国后拍的,可以用find结合exiftool的条件判断来筛选。比如假设你回国日期是2024年5月1日,相机记录的UTC+9时间从2024:05:01 09:00开始(对应实际GMT时间2024:05:01 00:00),可以这么写:
find /path/to/your/photos/ -type f -iname "*.jpg" -exec exiftool -if '$DateTimeOriginal ge "2024:05:01 09:00:00"' "-DateTimeOriginal-=0:0:0 9:0:0" "-ModifyDate-=0:0:0 9:0:0" "-CreateDate-=0:0:0 9:0:0" {} +
这个命令只会处理EXIF时间晚于指定时间的照片,避免误改之前的照片。
额外提示
- 先拿1-2张测试照片试手,确认命令生效后再批量操作
- 不管是JPG还是RAW格式(CR2、NEF等),
exiftool都能支持,只需要调整-iname的后缀匹配或者直接去掉该参数 - 如果还没安装
exiftool,Debian/Ubuntu系可以用sudo apt install libimage-exiftool-perl安装,Fedora/RHEL系用sudo dnf install perl-Image-ExifTool
内容的提问来源于stack exchange,提问作者ferg92
相关产品推荐
相关产品推荐

