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

基于EXIF时间从多目录复制图片至新目标的技术求助

按EXIF时间批量复制图片到目标路径的解决方案

针对你需要从多个嵌套目录(dir1、dir2及其子目录)中提取带EXIF时间的图片并复制到新路径的需求,我给你准备了两种实用方案,你可以根据自己的习惯选择:

方案一:用命令行工具(exiftool + find)快速实现

如果你习惯用终端操作,这个方案无需写代码,直接组合工具就能完成:

步骤1:安装依赖工具

首先确保你的系统上安装了exiftool(用来读取图片EXIF信息)和find(系统自带,用来遍历目录):

  • Linux/macOS:可以用包管理器安装,比如brew install exiftool(macOS)或者sudo apt install libimage-exiftool-perl(Debian/Ubuntu)
  • Windows:可以从官方下载exiftool,添加到系统PATH里即可

步骤2:执行复制命令

假设你的目标路径是/path/to/target,执行以下命令:

find /path/to/root -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.jpeg" \) -exec sh -c '
    for img do
        # 读取图片的EXIF拍摄时间(这里用DateTimeOriginal,也可以根据需求换其他时间字段)
        exif_time=$(exiftool -DateTimeOriginal -s3 "$img")
        # 如果EXIF时间存在,就复制到目标路径
        if [ -n "$exif_time" ]; then
            cp "$img" /path/to/target/
            echo "复制成功:$img"
        fi
    done
' sh {} +

命令说明

  • find /path/to/root:从你的根目录开始遍历所有文件
  • -type f \( -iname "*.jpg" ... \):筛选出所有图片格式文件(不区分大小写)
  • -exec sh -c '...' sh {} +:对每个找到的图片执行后续脚本
  • exiftool -DateTimeOriginal -s3 "$img":提取图片的原始拍摄时间,-s3表示只输出时间值
  • 如果EXIF时间不为空,就用cp复制到目标路径

方案二:用Python脚本实现更灵活的逻辑

如果你需要自定义筛选规则(比如只复制某个时间段的图片),Python脚本会更适合:

步骤1:安装依赖库

先安装读取EXIF的库,比如exifread(轻量易用):

pip install exifread

步骤2:编写Python脚本

import os
import shutil
import exifread

def copy_images_by_exif(root_dir, target_dir):
    # 创建目标目录(如果不存在)
    os.makedirs(target_dir, exist_ok=True)
    
    # 遍历根目录下的所有文件
    for root, dirs, files in os.walk(root_dir):
        for file in files:
            # 筛选图片文件
            if file.lower().endswith(('.jpg', '.jpeg', '.png', '.gif')):
                img_path = os.path.join(root, file)
                try:
                    # 读取EXIF信息
                    with open(img_path, 'rb') as f:
                        tags = exifread.process_file(f)
                    # 获取拍摄时间(DateTimeOriginal是常用的拍摄时间字段)
                    if 'EXIF DateTimeOriginal' in tags:
                        exif_time = str(tags['EXIF DateTimeOriginal'])
                        print(f"找到带EXIF时间的图片:{img_path} | 时间:{exif_time}")
                        # 复制到目标路径
                        shutil.copy2(img_path, target_dir)
                except Exception as e:
                    print(f"处理图片失败:{img_path} | 错误:{e}")

# 替换成你的根目录和目标路径
ROOT_DIR = '/path/to/your/root'
TARGET_DIR = '/path/to/your/target'

copy_images_by_exif(ROOT_DIR, TARGET_DIR)
print("所有符合条件的图片已复制完成!")

自定义扩展

如果你想只复制某个时间段的图片(比如你目录里标注的10:05到10:10的图片),可以在获取exif_time后添加判断逻辑:

# 示例:只复制10:05:00到10:10:00之间的图片
time_str = exif_time.split(' ')[1]  # 提取时间部分,比如"10:05:05"
if "10:05:00" <= time_str <= "10:10:00":
    shutil.copy2(img_path, target_dir)

两种方案都能帮你高效完成需求,命令行适合快速操作,脚本适合自定义场景,你可以按需选择~

内容的提问来源于stack exchange,提问作者user9046520

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:46:37