如何通过Bash脚本利用照片EXIF数据按年月归类照片
按拍摄年月整理照片的Bash脚本方案
以下是基于你已使用的identify命令,提取EXIF拍摄年月并自动归类照片的可行脚本方案:
核心流程
- 遍历目标目录下的指定格式照片文件
- 从EXIF数据中提取
YYYY-MM格式的拍摄年月 - 创建对应年月的文件夹(支持两种常见结构)
- 将照片移动到对应文件夹中
完整脚本
#!/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
使用步骤
- 将脚本保存为
organize_photos.sh - 赋予执行权限:
chmod +x organize_photos.sh - 把脚本放到照片所在目录,运行:
./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
相关产品推荐
相关产品推荐

