You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于照片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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:04:28