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

如何通过Bash脚本利用照片EXIF数据按年月归类照片

按拍摄年月整理照片的Bash脚本方案

以下是基于你已使用的identify命令,提取EXIF拍摄年月并自动归类照片的可行脚本方案:

核心流程

  1. 遍历目标目录下的指定格式照片文件
  2. 从EXIF数据中提取YYYY-MM格式的拍摄年月
  3. 创建对应年月的文件夹(支持两种常见结构)
  4. 将照片移动到对应文件夹中

完整脚本

#!/bin/bash

# 定义要处理的照片格式,可根据需求添加/修改
photo_formats=("*.jpg" "*.jpeg" "*.png" "*.gif" "*.raw" "*.heic")

# 遍历所有指定格式的文件
for format in "${photo_formats[@]}"; do
    for file in "$format"; do
        # 跳过不存在的文件(比如该格式无匹配文件时)
        [ -f "$file" ] || continue

        # 提取拍摄年月:从identify的输出中匹配YYYY-MM部分
        year_month=$(identify -verbose "$file" | grep -oP 'exif-DateTimeOriginal- \K\d{4}-\d{2}')

        # 跳过无法获取拍摄日期的文件
        if [ -z "$year_month" ]; then
            echo "[跳过] 无法获取文件 $file 的拍摄日期"
            continue
        fi

        # 选择目标文件夹结构:二选一即可
        # 选项1:YYYY-MM格式的文件夹(如2004-03)
        target_dir="$year_month"
        # 选项2:YYYY/MM层级式文件夹(如2004/03)
        # target_dir="${year_month//-/\/}"

        # 创建目标文件夹(-p参数确保父目录自动创建)
        mkdir -p "$target_dir"

        # 移动文件(-n参数避免覆盖同名文件,需覆盖可移除)
        mv -n "$file" "$target_dir/"
        echo "[完成] 已将 $file 移动到 $target_dir/"
    done
done

使用步骤

  1. 将脚本保存为organize_photos.sh
  2. 赋予执行权限:chmod +x organize_photos.sh
  3. 把脚本放到照片所在目录,运行:./organize_photos.sh

关键命令说明

  • grep -oP 'exif-DateTimeOriginal- \K\d{4}-\d{2}':用Perl正则精准提取年月,\K忽略前缀文本,直接捕获YYYY-MM部分
  • mkdir -p "$target_dir":自动创建层级文件夹,比如创建2004/03时会自动生成2004父目录
  • mv -n:安全移动文件,避免意外覆盖已有文件

备选优化方案(更稳定的EXIF提取)

如果identify偶尔出现提取失败,可改用exiftool(需提前安装),提取年月的命令更简洁可靠:

year_month=$(exiftool -d "%Y-%m" -DateTimeOriginal -s3 "$file")

只需将脚本中对应的提取行替换为上述命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:55:16