Bash脚本仅将exif元数据日期(不是时间)添加到没有来自其所属目录的EXIF元数据的照片中

时间:2017-10-25 05:38:18

标签: bash exif exiftool

我正在尝试使用jheadexiftool创建脚本,以帮助我解决因Apple照片导出而导致的元数据问题。我正试图摆脱苹果生态系统,但Apple照片并不仅仅使用EXIF对照片进行排序,而且还导入日期等。因此,当我使用EXIF数据导出原始照片时,它们最终会出现在包含日期的目录中但是#39; t都有exif数据。

例如:

/8 February 2011/img - 6676.JPG

此目录中唯一没有元数据的照片。我想将日期(8-2-2011)添加到元数据中。

bash不是很好,所以如果有人可以提供帮助,我将非常感激。

2 个答案:

答案 0 :(得分:1)

继续评论,您可以使用bash中的date -d轻松将目录名称转换为日期。诀窍是从完整文件名解析目录(例如/8 February 2011/img - 6676.JPG)。由于它是绝对路径,因此无论您是使用'/'命令还是仅使用bash 字符串索引来删除前导dirname >参数扩展(这里最简单)。

这是一个简短的示例,展示了如何处理您提供的目录。您可能需要修改jhead命令,以便在所有照片上的任何脚本松动之前对其进行测试。

#!/bin/bash

f="/8 February 2011/img - 6676.JPG"    ## example filename "$f"

[ "${f:0:1}" = '/' ] && d="${f:1}"     ## check/trim leading '/' for dir "$d"
d="${d%%/*}"                           ## strip filename leaving dir for time in $d
dt="$(date -d "$d" +'%d-%m-%Y')"       ## get date from $d in your format
jhdt="$(date -d "$d" +'%Y:%m:%d')"     ## get date in format required by jhead

## output dates and commands for jhead
printf "file    : \"%s\"\n" "$f"
printf "has date: %s\n" "$dt"
printf "jhead -mkexif \"%s\"\n" "$f"
printf "jhead -ds %s \"%s\"\n" "$jhdt" "$f"

示例使用/输出

$ bash dirtodate.sh
file    : "/8 February 2011/img - 6676.JPG"
has date: 08-02-2011
jhead -mkexif "/8 February 2011/img - 6676.JPG"
jhead -ds 2011:02:08 "/8 February 2011/img - 6676.JPG"

答案 1 :(得分:0)

感谢您的帮助。这是我的" final"脏脚本修复我的25k照片集exif文件,由Apple照片生成并导出到Plex或Google照片:

#!/bin/bash
FILES=/share/Photos/Tom/*/*.jpg
DATE_IMPORT="2017:09:1*"
for f in $FILES
do
  date_exif=`jhead -q "$f" | sed -n -e 's/^.*date //p' | cut -d' ' -f 5`
  #echo $date_exif
  if [[ $date_exif =~ $DATE_IMPORT ]]
     then
        aplevent=`echo "$f" | cut -d '/' -f 5`
        date=`echo "$aplevent" | rev | cut  -d',' -f 1 | rev;`
        date_folder="$(date -d "$date" +'%Y:%m:%d')"
        echo "Date exif: "$date_exif
        echo "Date fix:"$date_folder
        echo "$f"
        jhead -mkexif "$f"
        jhead -ds"$date_folder" "$f"
        jhead -ft "$f"
  fi
done