如何基于照片EXIF拍摄日期同步指定日期之后的照片(结合find、rsync、identify或exiftool)
如何基于照片EXIF拍摄日期同步指定日期之后的照片(结合find、rsync、identify或exiftool)
嘿,我来帮你搞定这个需求——要基于照片的EXIF拍摄日期而非文件修改日期,用rsync同步指定日期之后的照片,结合find和合适的EXIF工具就能完美解决,我给你两种靠谱的方案,一步步来:
核心思路
先遍历所有照片,提取每张的EXIF原始拍摄日期,和你指定的起始日期对比,筛选出符合条件的文件,再用rsync批量同步这些文件。
方案一:用exiftool(推荐,更专业稳定)
exiftool是专门处理EXIF元数据的工具,提取拍摄日期的准确性和兼容性都比identify好,优先用它。
步骤1:筛选指定日期后的照片
假设你要同步2020年5月1日及以后拍摄的照片,先执行下面的命令生成要同步的文件列表:
find /path/to/source/photos -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) -exec sh -c ' # 设置目标起始日期(格式:YYYY-MM-DD HH:MM:SS) target_date="2020-05-01 00:00:00" # 提取照片的原始拍摄日期,指定输出格式和目标日期一致 photo_date=$(exiftool -d "%Y-%m-%d %H:%M:%S" -DateTimeOriginal -s3 "$1") # 对比日期,符合条件就输出文件路径 if [ "$photo_date" \> "$target_date" ]; then echo "$1" fi ' sh {} \; > /tmp/photos_to_sync.txt
解释下关键部分:
find遍历你指定的源照片目录,筛选常见的图片格式(可以按需添加*.raw等格式)-DateTimeOriginal是照片的原始拍摄日期,比DateTime更精准(后者可能被编辑过)- 输出的文件路径会存到
/tmp/photos_to_sync.txt临时文件里
步骤2:用rsync同步筛选出的照片
有了文件列表后,直接用rsync批量同步:
rsync -av --files-from=/tmp/photos_to_sync.txt /path/to/source/photos/ /path/to/destination/
-av:归档模式(保留文件权限、目录结构等)+ 详细输出,适合同步照片--files-from:指定要同步的文件列表,确保只同步筛选后的照片- 注意源路径末尾的
/要加上,这样rsync会正确匹配文件路径
方案二:用identify(ImageMagick自带工具)
如果你已经装了ImageMagick,也可以用identify来提取EXIF日期,但要注意它的输出格式不如exiftool规整,需要做额外处理:
步骤1:筛选指定日期后的照片
同样以2020年5月1日为起始日期,命令如下:
find /path/to/source/photos -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec sh -c ' # 把目标日期转成时间戳(秒数),方便对比 target_date=$(date -d "2020-05-01" +%s) # 提取exif:DateTime字段,截取日期时间字符串 photo_date_str=$(identify -verbose "$1" | grep -i "exif:datetime" | awk "{print \$2, \$3}") # 把提取到的日期转成时间戳,忽略转换失败的文件(比如非照片文件) photo_date=$(date -d "$photo_date_str" +%s) 2>/dev/null # 对比时间戳,符合条件就输出文件路径 if [ -n "$photo_date" ] && [ "$photo_date" -ge "$target_date" ]; then echo "$1" fi ' sh {} \; > /tmp/photos_to_sync.txt
步骤2:同步照片
和方案一一样,用rsync同步:
rsync -av --files-from=/tmp/photos_to_sync.txt /path/to/source/photos/ /path/to/destination/
一些实用提示
- 测试的时候可以先去掉命令末尾的
> /tmp/photos_to_sync.txt,直接打印输出,确认筛选的文件是否正确 - 如果要同步大量照片,生成文件列表后可以先检查一下临时文件的内容,避免误同步
- exiftool支持几乎所有常见的图片格式,而identify对RAW格式的支持可能有限,所以优先选exiftool
备注:内容来源于stack exchange,提问作者nutty about natty
相关产品推荐
相关产品推荐

